201521123009 第5周-继承、多态、抽象类与接口
1. 本周学习总结
2. 书面作业
作业参考文件下载
Q1:代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
//Parent.java
package com.parent;
class Parent{
private int i=1;
protected int j=2;
protected int geti(){
return i;
}
public void getj(){
System.out.println(j);
}
}
//Other.java
package com.parent;
class Other{
public static void showParentj(Parent p){
System.out.println(p.j);
System.out.println(p.geti());
}
}
//Child.java
package com.parent;
public class Child extends Parent{
public static void main(String[] args){
Parent p = new Parent();
Child c = new Child();
c.getParenti();
c.getParentj();
Other.showParentj(p);
}
public void getParenti(){
System.out.println(i);
}
public void getParentj(){
System.out.println(super.j);
System.out.println(j);
System.out.println(geti());
System.out.println(super.geti());
}
}
com.parent包
中Child.java文件
不能通过编译。System.out.println(i);
这句出现错误。
class Parent{
private int i=1;//父类private改为protected
protected int j=2;
protected int geti(){
return i;
}
public void getj(){
System.out.println(j);
}
}
在Eclipse试运行,如图
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?
不能通过编译,提示错误The type Parent is not visible.
,将parent类
改为public类
即可正常编译。
Q2:abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
Guess改造前,未使用抽象类,只能控制台输出;改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
写一个图形界面的类去继承Guess中的抽象类,然后重写抽象类中的代码。
2.3 结合该例子,你觉得什么时候应该使用abstract?
在类中的方法没有实现时,使用abstract
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明.
由例子可以看出,输出输入方法变了,环境变了;而不变的是这个抽象类。
Q3:Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
Comparable接口
强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Arrays.sort
进行自动排序;Arrays.sort
面向Comparable接口
进行编程,所以以可以直接使用
3.2 有了Comparable接口为什么还需要Comparator接口呢?
如果实现类没有实现Comparable接口
,又想对两个类进行比较(或者实现类实现了Comparable接口
,但是对compareTo方法
内的比较算法不满意),那么可以实现Comparator接口
,自定义一个比较器,写比较算法。
Q4:面向接口案例分析
**阅读Case-StudentDao.zip案例 **
4.1 画出类关系图,描述每个类与接口的作用。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
StudenDaoListImpl
与StudentDaoArrayImpl
学生信息存储的形式不同。StudenDaoListImpl
是用列表实现存储学生信息,支持存取不定长度的对象数组;StudentDaoArrayImpl
是用数组存储学生信息,需要已知数组的大小。
Q5:什么是面向接口编程?面向接口编程的好处是什么?
所谓面向接口编程,就是代码是与接口相关联的(比如Comparable接口
),而不需要考虑具体的实现类。
只要某个类(如Employee
)实现了相关的接口(如Comparable
),我们编写的面向接口(如Comparable
)的代码就可以适用。
Q6:结对编程:面向对象设计(大作业2-非常重要)(未完成)
6.1
6.2 常用功能描述框架图
6.3 关键代码
6.4 运行界面
3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
**3.1. 码云代码提交记录 **
**3.2. PTA实验 **
-运用Comparable接口进行排序:使用compareTo的方法,Comparable接口强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表可以通过Arrays.sort 进行自动排序。