一、本周学习总结

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学习笔记》 第五次学习总结的更多相关文章

  1. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  2. 20145213《Java程序设计》第五周学习总结

    20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...

  3. 20145337 《Java程序设计》第五周学习总结

    20145337 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 JAVA中的所有错误都会被包装成对象,如果你愿意,可以尝试执行并捕捉代表错误的对象后做一些处理.使用了try ...

  4. 20145218 《Java程序设计》第五周学习总结

    20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...

  5. 《Java程序设计》第五周学习总结

    20145224 <Java程序设计>第五周学习总结 教材学习内容总结 第八章异常处理 8.1.1使用try.catch ·教材范例用户连续输入整数,输入0结束后显示输入数的平均值(代码如 ...

  6. 20155304 2016-2017-2 《Java程序设计》第五周学习总结

    20155304 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 try catch JVM会先尝试执行try区块中的内容,若发生错误且与catch后 ...

  7. 20175126《Java程序设计》第五周学习总结

    # 20175126 2016-2017-2 <Java程序设计>第五周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第六章,本章内 ...

  8. 20175329 2018-2019-3《Java程序设计》第五周学习总结

    学号 20175329 2018-2019-3<Java程序设计>第五周学习总结 教材学习内容总结 第六章 接口与实现 使用关键字interface来定义一个接口.接口定义和类的定义十分相 ...

  9. 20175314 《Java程序设计》第五周学习总结

    20175314 <Java程序设计>第五周学习总结 教材学习内容总结 public接口可以被任意一个类实现,友好接口可被同一个包里的接口实现. Java不支持多重继承,即一个类只能有一个 ...

  10. 20175234 2018-2019-2 《Java程序设计》第五周学习总结

    20175234 2018-2019-2 <Java程序设计>第五周学习总结 接口实现流程简述 interface定义接口 接口只能定义常量和方法,方法不能是具体的 实现接口时,需类来完成 ...

随机推荐

  1. 分享一道JS前端闭包面试题

    输出以下代码的结果 function fun(n,o){ console.log(o); return { fun:function(m){ return fun(m,n);//[1] } } } v ...

  2. js实现轮播图动画

    在网页浏览中,可以看到轮播图是无处不在的,这是一个前端工程最基本的技巧.首先看看几个网页的呈现的效果. QQ音乐: 网易云音乐: 天猫: 接下来将从简到难总结几种实现轮播图的方法. 1.样式一:鼠标滑 ...

  3. gzip: File too large错误

    --AIX Gzip File Too Large Error------------------------------------2013/09/29 今天在使用gzip解压一个oracle rm ...

  4. .Net Webapi Swagger增加登录功能

    .mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...

  5. 截取TableView生成图片

    先看一下实例效果: 如果所示,这是一个在APP中截图,并调起微信客户端,发送给好友的例子,图片就是一个tableView的截图. 先实现一个小例子,如果tableVIew里面的内容,没有超过当前屏幕显 ...

  6. mint-ui —— navbar和tab-container的区别

    navbar的具体实现 <template> <div class="page-navbar"> <div class="page-titl ...

  7. 【Tomcat】shell 部署配置 war包

    使用shell 一次执行,将项目中的war包的配置全部修改 #!/bin/bash #----------------------------------------------- # FileNam ...

  8. DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

    介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录. 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博客园)&Andrew Ng机器学习课程 ...

  9. windows 10 安装tensorflow

    人工智能一浪接一浪,随着谷歌公布tensorflow源码,尤其是支持windows 10平台的python3.5以上版本,更是让更多人都想用windows操作tensorflow. 第一次安装,也不知 ...

  10. [js高手之路]HTML标签解释成DOM节点

    最近在封装一个开源框架,已经写了500行, 已经具备jquery的大多数常用功能.跟jquery的使用方法完全一样,jquery的选择器,几乎都能支持,为什么说这事,跟这篇文章的主题有毛关系呢?因为这 ...