201521123083《Java程序设计》第5周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关多态与接口的知识点。

1.2 可选:使用常规方法总结其他上课内容。
2. 书面作业
1. 代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
| 错误点 | 原因 | 修改 |
|---|---|---|
| System.out.println(i); | i来源于父类,父类于private,不可调用 | 最好将父类的变量i改为protect(public也行,protect更能体现封装性) |
结果:1 1 2 1
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
| 错误点 | 原因 | 修改 |
|---|---|---|
| showParentj(Parent p) | parent这个类不是public,因此只能在同一个包中调用 | 将parent改为public |
| p.j or p.geti() | 即使parent是public,这两个也不可以调用,因为protect修饰的只允许同一个包或者不同包的子类调用 | 最好把变量改private,为其设置public的getter和setter,不要直接调用这个变量,只调用getter和setter |
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
成为他的子类,就可以访问到,因为
protected修饰的属性或方法只允许同一个包或者不同包的子类调用。
2. abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
提供了更多的弹性,比如说我现在并不知道以后的需求,我游戏做好之后并不知道到底要在控制台下输出还是要在GUI下输出,甚至在web下输出。
那假如我现在把他写死了,变成控制台下输出,那以后的修改就很大了,甚至要来修改以前的源码,修改以前的源码的影响会很大,很多人已经在调用了,你修改源码可能造成
很多人程序出错,因此,我们尽量不要修改以前源代码,最好的做法就是把实现抽象,以后不管在控制台还是web界面输出,只要继承一下就好。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
重写一个类
GuiGame继承GuessGame。然后重写函数,然后调用的时候改成GuessGame game = new GuiGame();。
我用swing简单实现了一个。以下是效果图。
源码(GuiGame以及Game,限于篇幅,MyFrame就不贴出来了):
public class GuiGame extends GuessGame {
private MyFrame frame;
public GuiGame() {
frame = new MyFrame();
frame.setVisible(true);
}
@Override
public void print(String text) {
frame.Jprint.setText(text);
}
@Override
public void println(String text) {
frame.Jprintln.setText(text);
}
@Override
public int nextInt() {
int n=0;
try{
n= Integer.parseInt(frame.textField.getText());
}catch(Exception e){
}
return n;
}
}
public class Guess {
public static void main(String[] args) {
//GuessGame game = new ConsoleGame();
//game.go();
GuessGame game = new GuiGame();
game.go();
}
}
2.3 结合该例子,你觉得什么时候应该使用abstract?
在项目有重大弹性的时候,比如某些因素无可预料的时候,可以先把这些因素抽象化
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
变化的是输入输出,不变的是逻辑,游戏逻辑
3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
Comparable就是为了让某些类具有可比性,我们知道int型可比较,因为他们有比较的对象,比如5>4.但是对象就不一定了。比如person对象,有身高,体重,但是我们要比较两个person对象的大小
,系统怎么知道到底是要比较什么,身高还是体重,甚至谁先诞生,因此实现了Comparable接口,就能让系统比较的时候有个可以比较的东西,比较的逻辑处理在compareTo函数里面实现。
3.2 有了Comparable接口为什么还需要Comparator接口呢?
比如人可以比较体重,我们可以单纯compareTo里面重写人和人比较体重,猪也要和人比较,没事,急需些,但是猴子等等,那要处理的就很多了,这时候可以写个Comparator接口,
里面逻辑处理,不管什么类,只要是比较体重,就在比较大小的时候调用他,,不仅可以缩小person等类的compareT逻辑处理,还可以省很多代码,每个类都不要实现Comparable接口,只要要排序的时候传入实现这个接口的类就行了就可以。
4. 面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。
UML图如下:

这个程序里面最小的单位是单独定义的一个类
Student其他都是以这个类以最小单位去操作。
主要有接口StudentDao。他定义如何写,如何读以及如何展示学生列表。
有两个类StudentDaoArrayImpl以及StudenDaoListImpl。实现了接口StudentDao。不过实现的过程不同。一个是以列表(可变数组),另一个却是以数组来储存学生列表。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
实现的过程不同。一个是以列表(可变数组),另一个却是以数组来储存学生列表。
5. 什么是面向接口编程?面向接口编程的好处是什么?
结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
面向接口编程就是先把项目需求提取出来,作为接口。具体实现通过该接口的实现类来完成。当需求变化时,只需编写该需求的新的实现类,通过更改该接口的实现类就可以完成需求,不需要改写现有代码,减少对系>统的影响。 采用基于接口编程的项目,业务逻辑清晰,代码易懂,方便扩展,可维护性强。即使新来的人依然可以快速上手。对于分工开发来说,意义很大。比如第三题的,猜数字这个游戏的逻辑已经写好了,我们把>要在哪里实现这部分需求提取出来,作为接口,以后需求变化时,只需要重新实现这个接口就行,不用改写以前的源代码。
6. 结对编程:面向对象设计(大作业2-非常重要)
第6题提交作业的结构:
6.1
| 学生 | 项目地址 |
|---|---|
| 博客地址 | 码云地址 |
6.2 常用功能描述框架图

6.3 关键代码
public void addMerchandise(Merchandise merchandise){
merchandiselist.add(merchandise);
}
public void removeMerchandise(Merchandise merchandise){
merchandiselist.remove(merchandise);
}
public void clearMerchandise(){
merchandiselist.clear();
}
public Merchandise findMerchandise(String merchandiseName){
for (Merchandise merchandise : merchandiselist) {
if(merchandise.getName().equals(merchandiseName)){
return merchandise;
}
}
return null;
}
@Override
public String toString() {
return merchandiselist.toString();
}
6.4 运行界面

3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2. PTA实验
- 4-1
题目不理解,未实现 - 5-1&5-2
在实现Comparable或者Comparactor接口实现CompareTo方法的时候,其他系统是根据返回的数的正负来判断大小的,不是1,-1,0.
刚好,1,-1,0刚好对应,因此不用选择语句有选择性返回,比如比较人的年龄,只需要return this.age-other.age这样就行了;
201521123083《Java程序设计》第5周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- HTML 超链接 表格
1...超链接 <a href="网址" target="_blank"> 被点击的文字</a> 如果把 target 属性设置为&qu ...
- Java面试题大全
前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...
- Lenovo T440p 外放没有声音
背景:Lenovo T440p,今天突然想听会歌 外放竟然没声音,fuck!!! 任务栏声音图标也没有静音标志. 驱动出问题了?检查下驱动,正常. 找了耳机试下,正常,看来驱动真的没问题. 喇叭坏了? ...
- 安装atlas后执行hive命令报错
在集群中安装atlas,在安装atlas的节点上执行hive -e "show databases;" 正常,但是在集群中其他节点上执行hive -e "show dat ...
- JavaScript版—贪吃蛇小组件
最近在学习JavaScript,利用2周的时间看完了<JavaScript高级编程>,了解了Js是一门面向原型编程的语言,没有像C#语言中的class,也没有私有.公有.保护等访问限制的级 ...
- 使用进程池规避Python的GIL限制
操作系统 : CentOS7.3.1611_x64 python版本:2.7.5 问题描述 Python的GIL会对CPU密集型的程序产生影响,如果完全使用Python来编程,怎么避开GIL的限制呢? ...
- Linux的五种I/O模式
1)阻塞I/O(blocking I/O)2)非阻塞I/O (nonblocking I/O)3) I/O复用(select 和poll) (I/O multiplexing)4)信号驱动I/O (s ...
- IOS中的属性列表----Property List
属性列表,是一种用来存储串行化后的对象的文件.因为扩展名为plist ,因此通常被称为 plist文件. plist文件通常用于储存用户设置,也可以用于存储捆绑的信息,其内容为xml格式.它可以在程序 ...
- linux—find指令常见用法示例
Linux下find命令在目录结构中搜索文件,并执行指定的操作.Linux下find命令提供了相当多的查找条件,功能很强大.由于find具有强da的功能,所以它的选项也很多,其中大部分选项都值得我们花 ...
- 物体自由落体动态模拟(Linear Subspace)
三维物体变形方法赋予了模拟物体的动态特性,但是随着物体模型的复杂度慢慢增加,对高质量的实时变形方法也提出了更高的要求.对于高精度的大型三维网格而言,通常会设计一个低精度的子网格,并构建子网格与原始网格 ...
