第5周作业-继承、多态、抽象类与接口


1. 本周学习总结

1.1 思维导图总结:

1.2在本周的学习中,主要学习了以下几点:

 - 初步接触了接口的定义,用interface关键字定义接口,使用implements关键字操作接口
- Arrays.sort是面向Comparable接口的编程,要实现排序,就先要比较,也就是必须要先实现Comparable接口,实现该接口就是实现其中的CompareTo方法。还有Comparator接口的使用
- 接口的语法特性:不可以用new实例化;可以使用instancof运算符查看是否实现了接口;可以用extends进行扩展;接口中可以包含常量,用public static final修饰;一个类可以实现多个接口
- 继承体现了is—a关系,接口体现了has-a关系,两者均可体现多态

enum详解

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程序设计》第五周学习总结的更多相关文章

  1. 201521123025<java程序设计>第五周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 1.2 ...

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

    1. 本周学习总结 1.1 尝试使用思维导图总结有关多态与接口的知识点. 1.2 可选:使用常规方法总结其他上课内容. 2. 书面作业 **代码阅读:Child压缩包内源代码 Child.java源代 ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

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

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  8. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  9. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  10. 20175313 张黎仙《Java程序设计》第九周学习总结

    目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...

随机推荐

  1. 【FlashPlayer】-Debug版本-开发人员推荐

    Adobe的Flash-Player的版本分为“普通版本”和“Debug版本”,后者可以协助开发者测试和调试程序. 那么,先给出Debug版本的下载地址:http://www.adobe.com/su ...

  2. HDU 5543 Pick The Sticks:01背包变种

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意: 给你N个金条和一张长度为L的桌子.每个金条长度为a[i],价值为w[i].金条只能在桌子 ...

  3. 基于 Laravel、Vue.js开发的全新社交系统----ThinkSNS+

    什么是ThinkSNS+ ThinkSNS(简称TS)始于2008年,一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+.新的产品名 ...

  4. 流程控制------if else分支语句

    一.If`······else语句:如果条件成立,就执行在语句体... 语法:if    条件:   语句体1   语句体2   语句体3 ··········· 例如: 1. if True:   ...

  5. Python正则匹配

    使用Re模块 首先生成一个匹配模式pattern,如pattern='.test' 然后使用re.match(pattern,str)或者search()匹配调用 match跟search的区别: m ...

  6. .Net Core 2.0生态(4):Entity Framework Core 2.0 特性介绍和使用指南

    前言 这是.Net Core 2.0生态生态介绍的最后一篇,EF一直是我喜欢的一个ORM框架,随着版本升级EF也发展到EF6.x,Entity Framework Core是一个支持跨平台的全新版本, ...

  7. python自动化运维五:pexpect

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } pexpect是expect的封装,可以实现ssh,ftp,passwd,telne ...

  8. JAVA对XML文件的读写(有具体的代码和解析

    XML 指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具,应用于 web 开发的许多方面,常用于简化数据的存储和共享. xml指令 处理指令, ...

  9. 第8天:CSS制作导航栏

    今天主要学习了网页导航栏的制作.注意:引入外部CSS样式时,如果使用background:url(../images/1.png),一定记得用..跳出当前文件夹,回到上级目录. 一.导航栏实现步骤: ...

  10. 使用angular4搭建博客(一)

    本文长期更新,未经运行,严禁转载. 博客(制作中) http://101.200.58.228/ Github https://github.com/Teloi/TEIndex 框架选择 Angula ...