第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. sshpass做秘钥分发,ansible做自动化运维工具

    最近公司机器的增多,顺便还要上报表系统,考虑到服务器越来越多,手工的管理显得越来的越吃力,所以打算推进公司自动化运维工具的使用. 推进的过程中,一步一个坑踩过来的.由于公司之前未运用过自动化运维工具, ...

  2. Session获取不到的情况及解决办法(源码解析)

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处,请尊重他人努力成果,谢谢. 1. 当有连个sessionFactory时,容易产生获取不到session的情况 ...

  3. python爬虫url带中文解决方案之一

    import urllib2 urllib2.quote("呵呵哒") #输出 '%BA%C7%BA%C7%DF%D5'

  4. Oracle高水位2

    --Oracle高水位2---------------------2013/11/24 一.什么是水线(High Water Mark)? 所有的oracle段(segments,在此,为了理解方便, ...

  5. oracle 错误码 ORA-00119 / ORA-00130

    今天启动oracle时居然报错,错误信息如下: SQL> startup ORA-00119: invalid specification for system parameter LOCAL_ ...

  6. 从源码理解Spring原理,并用代码实现简易Spring框架

    前言(本文为原创,转载请注明出处) 个人之前对于框架的学习,就停留在配置,使用阶段.说实话过段时间就会忘得荡然无存.也不知道框架的运行逻辑,就是知道添加个注解,就可以用了. 由于实习,时间比较多,也感 ...

  7. Nginx也应用场景小结

    Nginx简介    Nginx一是一款轻量级的.高性能的HTTP和反向代理服务器, 具有很高的稳定性和支持热部署.模块扩展也很容易.当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器 ...

  8. SQL练习题完整(做完你就是高手)

    SQL 练习题答案 一.补充作业一.   设有三个关系:                S(SNO, SNAME, AGE, SEX,Sdept)                SC(SNO, CNO ...

  9. MYSQL创建数据库时候直接指定编码和排序规则

    安装我 在网上搜索的结果执行 代码: sudo gedit /etc/mysql/my.cnf 设置了默认编码为 UTF8 代码: [client]port            = 3306sock ...

  10. 【可视化】Echarts3图层

    默认echarts中canvas组件的z-index等于2,所以如果想让一个块元素如div覆盖echarts组件,需要指定z-index:3或者更大