201521123103 《Java学习笔记》 第五次学习总结
一、本周学习总结
1.1 尝试使用思维导图总结有关多态与接口的知识点。

1.2 可选:使用常规方法总结其他上课内容。
(1)、接口更灵活、更方便,可以方便的为现有的系统添加新的功能。
(2)、is-a 就使用继承,has-a就是用接口。
二、书面作业
1、代码阅读:Child压缩包内源代码
1.1com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
答:com.parent包中Child.java文件不能编译通过,System.out.println(i);这一句会出现错误。因为private是私有的,其他不能调用它。所以要将com.parent包中Child.java文件里的private int i=1改为protected int i=1。


1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
答:不能,提示错误The type Parent is not visible。因为上课讲的protected只对本包的所有类可见,而OutOfParentPackage.java是在另外一个包里面的。如果想要修改,只需要修改parent包中Parent类中的控制可见性的控制符几个protected改为public即可。
2、abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
答:由参考文件可知Guess改造前代码如下:
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.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
答:设计一个用来猜数字的图形界面的类并且继承Guess中的抽象类,然后用图形界面支持的输入输出语句来重写抽象类当中的抽象方法。
2.3 结合该例子,你觉得什么时候应该使用abstract?
答:如果该类中有抽象方法,则要用abstract,也就是说在具体的实现方法未定义的时候,需要我们用到abstract。
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
答:变化的是输入方法,不变的是抽象方法。因为抽象方法没有具体的定义,需要根据具体要求写一个外部的类、方法继承这个抽象类,但如果继承的话就对抽象方法有了重新的定义,就如本例中ConsoleGame类继承了抽象类GuessGame。
3、Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
答:Comparable接口抽象出了比较的共同特性:待比较的对象,比较的结果,对实现它的每个类的对象进行排序,实现此接口的对象列表和数组可以通过 Arrays.sort进行排序。
因为Comparable接口有compareTo一个方法,覆盖这个方法就能排序了,直接调用Arrays.sort就可以对元素进行排序。
3.2 有了Comparable接口为什么还需要Comparator接口呢?
答:因为Comparable接口的缺点是只能按照一种规则排序;而使用Comparator接口可以对比较方式进行修改。


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

答:Student类定义了对象的姓名以及其输出的格式,有toString()方法;StudentDao接口提供了判断是否写入数据、读数据、输出所有学生对象的方法;StudenDaoListImpl类是对StudentDao接口中的三个抽象方法的具体实现,用ArrayList的具体方法来完成相应操作。;StudentDaoArrayImpl类也是对StudentDao接口中的三个抽象方法的具体实现:readStudent(String) 读取学生信息,如果找不到返回null;diplayAllStudent()遍历整个数组,没找到学生信息返回false,对象为非空则输出学生信息;writeStudent(Student )添加学生信息,添加成功返回true。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
答:本质是属性不同:StudentDaoArrayImpl使用的是数组,StudenDaoListImpl使用的ArraysList。所以两个类对于接口的抽象方法,就会有不同的实现。
5、什么是面向接口编程?面向接口编程的好处是什么?结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
答:面向接口编程是根据接口的设计与属性,按照其实现方法进行编程,其实是面向对象编程的一部分。
好处:结构清晰,扩展性好,提高复用性,我觉得,面向接口编程能够使整个代码都很有条理,在修改的时候很方便。
参考链接:http://baike.baidu.com/item/面向接口编程/6025286?sefr=cr
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录

3.2. PTA实验
实验总结:
(1)感觉这次实验会有一丝丝的成就感,因为在编写过程中问题少了很多,对定义类掌握的比之前熟练了;
(2)学会了使用Arrays.sort进行排序以及如何实现Comparable接口,比如:5-1:实现先对name升序排序,如果name相同则对age进行升序排序;
(3)知道了可以编写不同的Comparator来满足多样的排序需求。比如:5-2:对年龄进行排序使用Comparator来编写;
(4)发现自己的问题是不怎编写main方法,说明自己的编程还太少,得继续加强。
201521123103 《Java学习笔记》 第五次学习总结的更多相关文章
- Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- 20145213《Java程序设计》第五周学习总结
20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...
- 20145337 《Java程序设计》第五周学习总结
20145337 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 JAVA中的所有错误都会被包装成对象,如果你愿意,可以尝试执行并捕捉代表错误的对象后做一些处理.使用了try ...
- 20145218 《Java程序设计》第五周学习总结
20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...
- 《Java程序设计》第五周学习总结
20145224 <Java程序设计>第五周学习总结 教材学习内容总结 第八章异常处理 8.1.1使用try.catch ·教材范例用户连续输入整数,输入0结束后显示输入数的平均值(代码如 ...
- 20155304 2016-2017-2 《Java程序设计》第五周学习总结
20155304 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 try catch JVM会先尝试执行try区块中的内容,若发生错误且与catch后 ...
- 20175126《Java程序设计》第五周学习总结
# 20175126 2016-2017-2 <Java程序设计>第五周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第六章,本章内 ...
- 20175329 2018-2019-3《Java程序设计》第五周学习总结
学号 20175329 2018-2019-3<Java程序设计>第五周学习总结 教材学习内容总结 第六章 接口与实现 使用关键字interface来定义一个接口.接口定义和类的定义十分相 ...
- 20175314 《Java程序设计》第五周学习总结
20175314 <Java程序设计>第五周学习总结 教材学习内容总结 public接口可以被任意一个类实现,友好接口可被同一个包里的接口实现. Java不支持多重继承,即一个类只能有一个 ...
- 20175234 2018-2019-2 《Java程序设计》第五周学习总结
20175234 2018-2019-2 <Java程序设计>第五周学习总结 接口实现流程简述 interface定义接口 接口只能定义常量和方法,方法不能是具体的 实现接口时,需类来完成 ...
随机推荐
- Apache崩掉:为进程配置合适的线程数
放假以来,服务器Apache二次崩掉了,不能再拖了,找bug解决: 崩掉的具体状况是,服务器出现弹框显示:Apache停止工作: 顺手关掉这个可恶的小弹框,世界就清静了,服务器正常运行: 具体问题: ...
- 一步一步学多线程-ThreadLocal源码解析
上网查看了很多篇ThreadLocal的原理的博客,上来都是文字一大堆,费劲看了半天,大脑中也没有一个模型,想着要是能够有一张图明确表示出来ThreadLocal的设计该多好,所以就自己看了源码,画了 ...
- session和cookie的辨析[阅读]
session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键.基于网上一些文章和资料的参阅,及作者个人的应用体会,对这 ...
- 云计算之openstack mitaka 配置详解(将疑难点都进行划分)
在配置openstack项目时很多人认为到处是坑,特别是新手,一旦进坑没有人指导,身体将会感觉一次次被掏空,作为菜鸟的我也感同身受,因为已经被掏空n次了. 以下也是我将整个openstack配置过程进 ...
- shell学习笔记(一)
1.第一行必须以#!/bin/bash #!表示脚本使用后面的解释器解释执行 2.echo 打印输出 例如 echo "hello world" > aa.txt 3.接 ...
- tomcat调优的几个方面(转)
tomcat调优的几个方面 和早期版本相比最新的Tomcat提供更好的性能和稳定性.所以一直使用最新的Tomcat版本.现在本文使用下面几步来提高Tomcat服务器的性能. 增加JVM堆内存大小 修复 ...
- Struts2学习笔记(十)——自定义拦截器
Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...
- 【Tomcat】batch获得war包
功能: 将maven项目打包复制到tomcat/webapps set git=C:\Users\zhengwenqiang\git set tomcat=e:\tomcat7.0.64 c: cd ...
- 【Win10】正常上网但ping不通外网
使用360免费wifi连接了热点后,发现无法ping外网,仅能ping网关,浏览器正常访问 后来,换了wifi共享大师,也是不行.同样ping不到外网,浏览器正常访问 但是 wifi 共享大师有个功能 ...
- JAVA中反射机制一
反射一 基本概念 一.反射机制的基本概念 什么是反射?反射是指在运行状态中,对于任意一个类,都可以获取到这个类的所有属性和方法:对于任意一个对象,都能够调用这个对象的任意方法和属性:这种动态获取信息及 ...