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 ...
随机推荐
- 【FlashPlayer】-Debug版本-开发人员推荐
Adobe的Flash-Player的版本分为“普通版本”和“Debug版本”,后者可以协助开发者测试和调试程序. 那么,先给出Debug版本的下载地址:http://www.adobe.com/su ...
- HDU 5543 Pick The Sticks:01背包变种
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意: 给你N个金条和一张长度为L的桌子.每个金条长度为a[i],价值为w[i].金条只能在桌子 ...
- 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+
什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...
- 流程控制------if else分支语句
一.If`······else语句:如果条件成立,就执行在语句体... 语法:if 条件: 语句体1 语句体2 语句体3 ··········· 例如: 1. if True: ...
- Python正则匹配
使用Re模块 首先生成一个匹配模式pattern,如pattern='.test' 然后使用re.match(pattern,str)或者search()匹配调用 match跟search的区别: m ...
- .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南
前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...
- python自动化运维五:pexpect
p { margin-bottom: 0.25cm; line-height: 120% } a:link { } pexpect是expect的封装,可以实现ssh,ftp,passwd,telne ...
- JAVA对XML文件的读写(有具体的代码和解析
XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令 处理指令, ...
- 第8天:CSS制作导航栏
今天主要学习了网页导航栏的制作.注意:引入外部CSS样式时,如果使用background:url(../images/1.png),一定记得用..跳出当前文件夹,回到上级目录. 一.导航栏实现步骤: ...
- 使用angular4搭建博客(一)
本文长期更新,未经运行,严禁转载. 博客(制作中) http://101.200.58.228/ Github https://github.com/Teloi/TEIndex 框架选择 Angula ...