201521123045 《Java程序设计》第5周学习总结

时间:2022-08-02 19:43:28

第5周-继承、多态、抽象类与接口

1. 本周学习总结

201521123045 《Java程序设计》第5周学习总结

2. 书面作业

Q1.代码阅读:Child压缩包内源代码

1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
答:201521123045 《Java程序设计》第5周学习总结

不能通过编译。System.out.println(i)这句出错了。  改为System.out.println(geti()); 出错的原因:Child的父类定义i为private,只限在类内部调用。

201521123045 《Java程序设计》第5周学习总结

1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
答:

不能通过编译。private的权限很小,无法在其他包中访问。

201521123045 《Java程序设计》第5周学习总结

201521123045 《Java程序设计》第5周学习总结

1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
答:

继承或间接继承与这个类的子类中可以访问。

2. abstract进阶:阅读GuessGame抽象类的设计与使用源代码

2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?

改造前,未使用抽象类,只能控制台输出改造后,使用抽象类,不止可以在控制台,也可以使用其他方式输出。

2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?

重写抽象类当中的抽象方法,设计一个新的类去继承2.1中提到的抽象类。

2.3 结合该例子,你觉得什么时候应该使用abstract?

如果后来想修改类的界面以适应新的情况时,就会非常的麻烦,可能要花费很多的时间。但是如果界面是通过abstract class来实现的,那 么可能就只需要修改定义在abstract class中的默认行为就可以了。

2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。

变化的是输入的环境输入的方式,不变的是抽象类的本身,还有这个游戏的功能。

3.Comparable与Comparator

3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?

Comparable接口对实现它的每个类的对象进行整体排序。比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

3.2 有了Comparable接口为什么还需要Comparator接口呢?

类的设计师没有考虑到比较问题而没有实现Camparable接口,我们可以通过Comparator来实现排序而不必改变类本身。现Comparable只能定义一种比较方法即compareTo(),但是有时候会对一个集合进行不同的排序方法,此时就可以提供别各种各样的Comparator来对集合排序,而对于要排序的元素不需要更改,所以我觉得Comparator提供了更多的灵活性。

4.面向接口案例分析,阅读Case-StudentDao.zip案例

4.1 画出类关系图,描述每个类与接口的作用

201521123045 《Java程序设计》第5周学习总结

 

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

 

StudentDaoArrayImpl使用的是数组来存储students对象(需输入学生数量),StudenDaoListImpl使用的是ArrayList来实现的。