201521123051《java程序设计》 第五周学习总结

1. 本周学习总结

1.1 尝试使用思维导图总结有关多态与接口的知识点。

使用工具:XMind

2. 书面作业

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

1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?

1.1

不能编译通过。 System.out.println(i); 出错。 因为父类的i是private类型,只有在本类中才能访问,子类中无法访问。
改正:private改为protected。

改正后的运行结果

1.2

不能编译通过。错误信息如上图。
一个Java文件中,可以有很多类,但只能有一个public类。
改正:将‘public’删掉。

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

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

抽象方法:在类中没有方法体的方法,就是抽象方法。
抽象类:含有抽象方法的类就叫抽象类。
好处:1 抽象类被继承以后,子类就可以用它的方法
     2利于整体构架 ,比如一个项目的所有抽象方法都写好了,整体的构架就出来了,剩下的就是实现了

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

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

当一个类中没有包含足够的信息来描绘一个具体的对象,这时候就可以使用abstract定义抽象类。

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

变化的是输入的方式,可以选择从控制台输入/对话框界面输入。不变的是抽象类,我们根据需要决定到底使用何种输入方法。
抽象类的作用是普通类无法替代的,抽象类的作用主要是提供一种模版。

3.Comparable与Comparator

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

对象比较大小,通过继承Comparable这个接口并实现接口的compareTo方法,返回int值。在比较对象大小的时候,如果返回值为负代表小于,正数代表大于,零代表相等。

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

其实很简单,单从字面理解就基本明白
1. Comparable:“可比较的”,(欲参与比较的对象对应的元素类需实现Comparable接口)
2. Comparator:“比较器”,比较器并不是比较自己的实例,而是比较其它类的两个不同对象
总结:Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
      而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
      Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。

4.面向接口案例分析

阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

StudenDaoListImpl与StudentDaoArrayImpl区别StudenDaoListImplArrayList用列表来存放学生信息,用ArrayList的具体方法来完成相应操作。,而StudentDaoArrayImpl是用数组来存放学生信息.

5.什么是面向接口编程?面向接口编程的好处是什么?

结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

在一个面向对象的系统中,系统的各种功能是由许许多多的不同对象协作完成的。在这种情况下,各个对象内部是如何实现自己的对系统设计人员来讲就不那么重要了;而各个对象之间的协作关系则成为系统设计的关键。小到不同类之间的通信,大到各模块之间的交互,在系统设计之初都是要着重考虑的,这也是系统设计的主要工作内容。面向接口编程我想就是指按照这种思想来编程吧!
例如题3中Comparable和Comparator接口,一个对象本身就已经支持自比较所需要实现的接口(Comparable接口);当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。(Comparator接口)。
好处:1.程序结构清晰,使用方便
2.接口经过合理设计后,有利于程序设计的规范化,并可以并行开发,提高工作效率
3.实现了程序的可插拔性,对于不同的需求切换不同的实现,降低了耦合度,随着系统复杂性的提高这个优势会越来越明显
4.允许多重实现,弥补了继承的缺陷

3. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2. PTA实验

继续完成前面未完成的实验面向对象1-基础-封装继承
函数(选做:4-1)、编程(5-1, 5-2)

实验总结

comparable是支持自比较,而后者是支持外部比较; 
comparable& Comparator都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。 
Comparable是一个对象本身就已经支持自比较所需要实现的接口 ,而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。
也就是说当你需要对一个自定义的类的一个数组或者集合进行比较的时候可以实现Comparable接口,当你需要对一个已有的类的数组或者集合进行比较的时候就一定要实现Comparator接口。另外,这两个接口是支持泛型的,所以我们应该在实现接口的同时定义比较类型。
原文地址:https://www.cnblogs.com/xqy123/p/6607905.html