博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java第五次作业
阅读量:4695 次
发布时间:2019-06-09

本文共 4139 字,大约阅读时间需要 13 分钟。

1. 本周学习总结

1109918-20170324104659940-225812840.png

2. 书面作业

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

//childpublic class test 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());    }}//parentclass Parent{    private int i=1;    protected int j=2;    protected int geti(){        return i;    }    public void getj(){        System.out.println(j);    }}//otherclass Other{    public static void showParentj(Parent p){        System.out.println(p.j);        System.out.println(p.geti());    }    }//OutOfParentPackageimport com.parent.*;public class OutOfParentPackage{    public static void showParentj(Parent p){        System.out.println(p.j);        System.out.println(p.geti());        p.getj();    }}

1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。

答:错的是 System.out.println(i);将private改成protected就可以了。    分析:因为clild没有重新定义i和j的值,所以只用之用输出父类中的值,且加上super的方法名就是使用父类的方法,其余按照程序运行输出就可以了。

运行结果

1109918-20170325094245002-982655391.png

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

答;编译出现了错误,` public static void showParentj(Parent p)`出现了错误,原因是找不到Parent。因为geti()的方法是protected的,所以外部无法访问,所以吧parent中的所有方法名和变量类型都设成public就可以了。

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

//改造前package cc.openhome;import java.util.Scanner;public class Guess {    public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int number = (int) (Math.random() * 10);        int guess;                do {            System.out.print("猜数字(0 ~ 9):");            guess = scanner.nextInt();        } while(guess != number);                System.out.println("猜中了...XD");    }}//改造后package cc.openhome;public abstract class GuessGame {    public void go() {        int number = (int) (Math.random() * 10);         int guess;        do {            print("输入数字:");            guess = nextInt();        } while(guess != number);        println("猜中了");    }        public abstract void print(String text);    public abstract void println(String text);    public abstract int nextInt();}

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

改造前,未使用抽象类,只能控制台输出改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入

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

答:设计一个图形界面猜数字的类去继承上文提到的抽象类,然后用图形界面支持的输入输出语句来重写抽象类当中的抽象方法。

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

1.当父类不知道子类的方法实现方式时,可以用abstract。2.当有多个子类继承该方法,且实现方法不同时,可以用抽象类,有点像多态。

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

答:变化的是控制台输入方法,不变的是方法实现的结果都一样。    abstract是一种抽象方法,他没有具体的实现及输入输出的方式,所以需要继承该方法,并且给出实现的具体方式,否则抽象类是没有任何意义的。要有一个非抽象类的类去继承它才可以。

3.Comparable与Comparator

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

答:Comparable接口将比较代码嵌入自身类中。在开发中我们可能会遇到需要将一些对象有序的放入到集合中,这时候我们只需要让类实现java.lang.Comparable
接 口。 因为Comparable接口只有`public int compareTo(T o);`一个方法,所以覆盖compareTo这个方法即可实现自动排序,这样就不用自己写一个排序的方法。

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

答:因为comparable接口是一个内比较器,是强制排序的那种。但是我们实际运用中可能想要通过不同类型的比较方式去排序,所以就需要comparator,因为他是可以选择排序方式的。

4.面对接口案例分析

阅读Case-StudentDao.zip案例

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

1109918-20170325114134127-2007928877.png

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

答:StudenDaoListImpl与StudentDaoArrayImpl各自的私有属性不同,即实现的数据结构不一样,StudenDaoListImpl是用ArrayList实现的,而StudentDaoArrayImpl是用数组    实现的。所以两个类对于接口的抽象方法相同但是有不同的实现。两个类具体的方法是两种不同的。

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

面向接口编程关注的是不同的类是否有共同的方法,不关心对象本身。    题目3用到Comparable和Comparator两个接口,通过这两个接口,我们可以很方便地对自己定义的类进行比较,从而调用Arrays里面已经写好的sort()方法来排序。    这个过程相当于面向接口编程。题目4也是如此,在Test类里面,我们只要关心数据到底是以何种数据结构来存放,不需要管具体的底层实现。用列表,数组都可以    实现写入学生数据、读取学生数据和遍历学生信息的操作。    当我不知道要以什么方式排序,只知道需要有排序功能时,那么我就必须使用接口告诉编译器,我这个类具有排序的功能。    但是具体实现未知,具体实现之后再写。面向接口编程就是说我有这个功能,但是具体实现不知道,    在设计时必须要考虑到各种功能,但是却不需要每一个都具体写出来,在做项目时让逻辑更清晰明白。
  1. 码云上代码提交记录及PTA实验总结

3.1. 码云代码提交记录

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

3.2. PTA实验

-Java接口是一系列方法的声明,是一些方法特征的集合。-一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为。-通过实现接口,达到将功能抽象化的作用,便于程序设计与维护。-本次实验更加清楚的知道了三种定义类型的继承范围。

转载于:https://www.cnblogs.com/lsl321/p/6615993.html

你可能感兴趣的文章
HDU 3863 (博弈) No Gambling
查看>>
文件锁使用
查看>>
iOS 中的加密方式
查看>>
pdftk
查看>>
OS_EVENT 信号量
查看>>
学习ThreadLocal
查看>>
在 Visual Studio 调试器中指定符号 (.pdb) 和源文件
查看>>
直接量
查看>>
leetcode 115. 不同的子序列(Distinct Subsequences)
查看>>
三元表达式
查看>>
Go初接触之libjpeg-turbo
查看>>
python--生成器协程运算
查看>>
php中文字符串截取乱码问题解决
查看>>
INFT 3030 Concurrent Programming
查看>>
小心了,这个设置会导致你的vm重启时被强制重装系统!
查看>>
邮票面值设计 (动态规划+DFS)
查看>>
解决INSTALL_FAILED_MISSING_SHARED_LIBRARY (转载)
查看>>
Linux内核高端内存
查看>>
HTML列表
查看>>
JAVA插入数据到MySql少了8小时
查看>>