201521123047 第五周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关多态与接口的知识点。
1.2 可选:使用常规方法总结其他上课内容。
参考资料:
百度脑图
XMind
2. 书面作业
1.代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
答:不能编译通过,出错的地方在System.out.println(i);
,因为父类Parent中i定义为private
,所以子类Child中不能用i,只要把给予权限即可,把private
改为protected
或public
就行。
结果为
1
2
2
1
1
2
1
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?
答:不能,提示The type Parent is not visible,因为Parent类不能在包外访问,需要在前面加上public。之后还要将Parent类里面改为public int j=2;public int geti()
。
2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
答:改造后可以自定义输入,输出方法,而不局限于控制台输入。抽象类相当于给了个模板,我们可以自定义一个具体的子类,而抽象方法也是可以有我们自定义一个具体方法。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
答:需要定义一个图形界面的类,然后在定义输入,输出的具体方法。大概。。。
2.3 结合该例子,你觉得什么时候应该使用abstract?
答:就像pta上求方形,圆形的边长,面积这些例子,当操作方法为一类时(求边长,求面积),可以用abstract。abstract给我们的是一个模板,我们可以根据具体的要求来具体定义。
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
答:变化的是操作的具体方法,不变的是需要操作的这个动作(比如输入,输出),可能实现的方式不一样,但他们的目的都是输入输出,这个是不变的。
3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
答:Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Arrays的对象想要Arrays的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。compareTo方法的返回值是int,有三种情况:
- 比较者大于被比较者(也就是compareTo方法里面的对象),那么返回正整数
- 比较者等于被比较者,那么返回0
- 比较者小于被比较者,那么返回负整数
3.2 有了Comparable接口为什么还需要Comparator接口呢?
答:因为我们可能对conmparaTo方法里的比较方式不满意,所以需要用Comparator接口。Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int,有三种情况:
- o1大于o2,返回正整数
- o1等于o2,返回0
- o1小于o2,返回负整数
3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。
4.面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。
Student类:只有名字这个属性的一个类;
StudentDao接口:里面有三个方法,分别为writeStudent
、readStudent
、diplayAllStudent()
,用来写入,读取和显示学生信息;
StudenDaoListImpl类:使用列表存放学生信息,里面定义了接口里的三个具体方法,即接口里的三个抽象方法,在这个类中被具体了;
StudentDaoArrayImpl类:使用数组来存放学生信息,里面同样定义了三个具体方法。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
答:StudenDaoListImpl是用列表实现(ArrayList),而StudentDaoArrayImpl是用数组实现的。
5.什么是面向接口编程?面向接口编程的好处是什么?
结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
答:说白了接口就是标准规范,就是定死了一个框架,我们根据这个框架去执行,有了标准去遵守就容易扩展,我们只需要根据标准编程,而不用针对具体的实现类。就像第4题中的StudentDao接口,我们规范了三个方法框架,所以我们只能按这个框架来具体定义,不一定都要定义的一模一样,StudentDaoArrayImpl类与StudenDaoListImpl类中各自定义的方法都不同,但是他们的方法名字和里面的参数一定都是按标准来的
public Student readStudent(String name);
public void diplayAllStudent();```,这样的好处是更加抽象,更加面向对象,~~还能提高编程的灵活性。~~其次灵活性也提高了,比如在另一个类中想用别的输入方法,我们就可以在类中具体一个“别的”输入方法。也就是说同样叫writeStudent的方法,实际上他们的实现的方式不一样。
###6. 结对编程:面向对象设计(大作业2-非常重要)
**内容**:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
**写出**:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
**形式**: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
**注意**: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。
选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。
![](http://images2015.cnblogs.com/blog/1109846/201703/1109846-20170325212150877-1770125514.png)
#3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
###3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
![](http://images2015.cnblogs.com/blog/1109846/201703/1109846-20170325143057518-1537266745.jpg)
###3.2. PTA实验
继续完成前面未完成的实验面向对象1-基础-封装继承
函数(选做:4-1)、编程(5-1, 5-2)
实验总结:
- 实验一,学会初步使用接口Comparable的使用方法,以及 compareTo的使用方法。在主函数里还是使用Arrays.sort来排序。(已经重写了compareTo方法,所以可以直接排序)
- 实验二,学习使用Comparator的方法,因为名字和年龄是不同的数据类型,~~~所以比较的时候使用的方法也是不一样的,年龄可以直接用大于号,小于号来比较,名字的话就用compareTo来比较。~~~所以这两类数据的比较方法是不一样的。年龄是int型,用大于号,小于号就可以比较,而名字是string型,用编写的comparaTo来比较。