201521123071《Java程序设计》第五周学习总结
第5周作业-继承、多态、抽象类与接口
1. 本周学习总结
1.1 思维导图总结:

1.2在本周的学习中,主要学习了以下几点:
- 初步接触了接口的定义,用interface关键字定义接口,使用implements关键字操作接口
- Arrays.sort是面向Comparable接口的编程,要实现排序,就先要比较,也就是必须要先实现Comparable接口,实现该接口就是实现其中的CompareTo方法。还有Comparator接口的使用
- 接口的语法特性:不可以用new实例化;可以使用instancof运算符查看是否实现了接口;可以用extends进行扩展;接口中可以包含常量,用public static final修饰;一个类可以实现多个接口
- 继承体现了is—a关系,接口体现了has-a关系,两者均可体现多态
2. 书面作业
1.代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。

答:出错是因为“i”被private权限修饰,被封装了,在其他的类中不能被直接引用。只能通过父类提供的方法实现。在Child类中,getParenti方法是想输出“i”的值,若Parent类可以被改变,则可将“i”定义为protected即可输出;不然则用this或super来调用父类的方法实现。因为被protected定义的在相同包内可以直接存取。
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?

答:因为Parent类没有定义权限关键词,所以权限范围默认是包范围,不同包类的不可存取。修改如下:
import com.parent.*;
public class OutOfParentPackage {
public static void showParentj(Parent p){
System.out.println(p.getJ());
System.out.println(p.geti());
p.getj();
}
}
package com.parent;
public class Parent{
private int i=1;
protected int j=2;
public int geti(){
return i;
}
public void getj(){
System.out.println(j);
}
public int getJ() {
return j;
}
}
2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
答:这样改造可以构造出一个固定的一组行为的抽象描述,这组行为能够有任意个可能的具体实现方式。可以在文本模式下执行,也可以用窗口程序执行,也可以用网页,这就扩展了此模块的行为功能,大大增强了他的可行性。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
答:使用Swing组件,AWT图形界面库和Java2D绘图吧......
2.3 结合该例子,你觉得什么时候应该使用abstract?
答:abstract类可以使得类的设计者能够创建方法的原型,而真正的实现留给使用这个类的人。正如该例子,当我们在做一个比较复杂的项目时(假设),一些简单的方法(比如:游戏的主体go()方法部分),或者说一些项目的主干部分,就可以马上先写出来,但有一些方法比较复杂,或者说像例子中那样对搭建环境平台有要求,而且有可能具体环境都不清楚是哪个,这种时候在不同的类中就需要不同的实现,此时就需要用到abstract。
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
答:不变的是游戏的主体,也就是go()方法。变化的是显示输出、取得用户输入的部分。在改造之前是直接输出,程序结构单一;改造之后,将游戏的主体写入抽象类GuessGame中,将执行输入输出的部分定义为抽象方法,然后再撰写ConsoleGame类,继承抽象类GuessGame,操作当中的抽象方法,然后再在main函数中创建出ConsoleGame实例,执行ConsoleGame中定义的流程,也就是游戏的主体go()方法。
3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
Comparable接口的用途是,当某些对象想实现接口的类时,会被强行排序。
答:Comparable接口的用途是强行对实现它的每个类的对象进行整体排序。因为Comparable位于包java.lang下,而java.util.Arrays类继承了java.lang.Object类,由继承的概念可知,相当于Arrays继承了这个接口的操作。所以当某个类实现了Comparable接口,就可以直接使用Arrays.sort对其进行排序了。
3.2 有了Comparable接口为什么还需要Comparator接口呢?
答:1.Comparable位于包java.lang下,而Comparator位于包java.util下,显然默认为Comparable下的方法。
2.首先,Comparable是在集合内部定义的方法实现的排序,compareTo方法是放在对象类里面的,在集合内部现实compareTo的方法。Comparator是在集合外部实现的排序,compare是放在比较对象的类外面的,需要在集合外定义compare的方法,也就是再写一个类,而且需要导入java.util.Comparator类。
3.其次,自定义的类要加入List容器后才能够排序,如果不指定Comparator,那么就实现Comparable接口设定的排序方法。
4.Comparator是一个专用的比较器,当这个对象不支持自比较函数或者自比较函数不能满足要求时,可以写一个比较器来完成两个对象之间大小的比较。
5.简单说,Comparable接口是一个对象本身已经支持自比较所需要实现的接口。Comparator是一个另写一个外部类来实现的比较的接口。
6.例如:Student类实现Comparable接口,先按照age进行排序,如果age相等时再按照name进行排序。Comparator则是可以按照age进行排序或按照name进行排序等等。
4.面向接口案例分析,阅读Case-StudentDao.zip案例:
4.1 画出类关系图,描述每个类与接口的作用。

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
答:StudenDaoListImpl使用了ArrayList存储数据,实现了List接口。所以它的代码量就比较少,而且简洁明了,java.io.File;java.io.FileNotFoundException;java.io.PrintWriter后还能以文本形式存储。而StudentDaoArrayImpl使用了数组存储信息,主要是以一段连续内存保存数据的,随机访问是最快的,但不支持插入、删除、迭代等操作,适合在操作和数据较少时使用。
5.什么是面向接口编程?面向接口编程的好处是什么?结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
答:1.所谓面向接口编程,就是代码与接口相关联的(如StudentDao接口),而不需要考虑具体的实现类(如StudentDaoArrayImpl类,StudenDaoListImpl类)。如Test.java中,当StudentDaoArrayImpl类实现了StudentDao接口,其中编写的面向接口的代码(如:其中的writeStudent();readStudent();diplayAllStudent()方法)就可以使用了。
2.好处:IDP原则。接口和实现分离了。如Test.java所示,要往后台写数据时,因为这是面向面向接口编程,我可以选择写入不同的后台,数据库、文件、数组、List都可以,他们都具有相同的功能,只是实现的方式不一样罢了。既方便,又省事。
**6. 结对编程:面向对象设计(大作业2-非常重要)
内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。
选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。
第6题提交作业的结构:
6.1
| 学生A | 学生B | 项目地址 |
|---|---|---|
| 学生A的博客连接 | 学生B的博客连接 | 项目码云地址 |
6.2 常用功能描述框架图
6.3 关键代码
6.4 运行界面**
3. PTA实验总结及码云上代码提交记录
3.1本周Commit历史截图

3.2 实验总结
这周的实验不算很难,前两道题是对操作接口的简单应用,第二题里的NameComparator类和AgeComparator类采用了上机课时老师教的直接return的方法,一行代码就完事了,很简洁。所以以后在写代码的时候要善于利用一些巧妙的手法。比如说:Comparable接口的compareTo方法中只会返回0,1,-1值,所以可以直接`return p1.getAge()-p2.getAge();
201521123071《Java程序设计》第五周学习总结的更多相关文章
- 201521123025<java程序设计>第五周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...
- Java程序设计第五周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175313 张黎仙《Java程序设计》第九周学习总结
目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...
随机推荐
- JFFS2文件系统的移植
Linux文件系统的移植-JFFS2 JFFS2是JFFS的后继者,由Red Hat重新改写而成.JFFS2的全名为JournallingFlash File System Version 2(闪存日 ...
- 开源社交系统ThinkSNS v4.6.1更新日志及功能详解!
ThinkSNS 开源社交系统 v4.6.1更新日志 [修复]聊天无法使用emoji问题 [修复]后台禁用用户后,app第三方登录可登录问题 [修复]部分接口问题 [修复]h5个人中心获取用户信息问题 ...
- 如何验证所做的AIX系统备份是否可用
--如何验证所做的AIX系统备份是否可用 ----------------------------------2013/11/15 系统备份(mksysb)的介质可以是磁带,也可以是CD和DVD.想要 ...
- 关于JS中利用for循环解决实际问题的逻辑操作
第一部分 <script> // <!--折纸:折多少次和珠穆朗玛峰一样高//1.一张纸的厚度是0.0001米,将纸对折,对折多少次厚度超过珠峰高度884 ...
- iOS9中关于 NSURLSession/NSURLConnection HTTP load failed 的解决办法
最近为了新的存管app上线,忙了近一个月,重新过了一段996的日子,今天终于可以喘口气,继续更新博客了.本文记录一下在iOS 9中发送https请求遇到的问题及解决办法,希望通过本文,可以对ATS的配 ...
- Hibernate2---- 查询单条记录
1.根据已完成的Hibernate1基础案例,我们接下来写一下查询,修改删除,对于基础生可以学习一下 只改写一下测试类的代码 private void findStudent() { //02Hibe ...
- 【Ubuntu 16】深入Ubuntu文件系统
Ubuntu文件系统的设计目的就是把文件有序地组织在一起,提供一个从逻辑上组织文件的文件系统.除了文件的组织外,文件安全也是文件系统的设计要点,所以文件的访问权限是文件系统不可缺少的组成部分 Ubun ...
- 【Hadoop】集群配置要点
1.SSH免密码登录 1.1生成公钥,一直enter,直到完成 dream361@master:~$ ssh-keygen -t rsa 1.2传送公钥 dream361@master:~$ scp ...
- 谈谈培训机构的"骗局"给新人一些建议
前言 本文只谈"骗局",不谈其他,绝不引战,如有错误,希望指出我会及时改正,想要讨论的可以在留言区写下你的观点和经历. 为什么要写这篇文章呢,近些年培训这个话题也比较火,很多在看这 ...
- Andrew Ng机器学习课程笔记--week9(下)(推荐系统&协同过滤)
本周内容较多,故分为上下两篇文章. 本文为下篇. 一.内容概要 1. Anomaly Detection Density Estimation Problem Motivation Gaussian ...