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有何区别?
StudenDaoListImplStudentDaoArrayImpl学生信息存储的形式不同。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 进行自动排序。

posted @ 2017-03-22 08:56  张晨晨  阅读(380)  评论(1编辑  收藏  举报