201521123028 《Java程序设计》第5周学习总结
1. 本周学习总结

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

Child.java文件如图所示,图示代码中的“System.out.println(i);”报错,则说明这个文件不能编译通过。
至于原因,首先让我们看看i的出处,Parent.java的代码

从Parent.java之中,我们可以清楚的看到,作为Child的父类,Parent中的i是用private修饰的,因此作为子类的Child无法正常调用i。
解决方法可以参考j的修饰方法,使用protected进行修饰。
输出结果为:
1 //来自c.getParenti()
2 //来自c.getParentj()
2 //来自System.out.println(i)
1 //来自System.out.println(super.j)
1 //来自System.out.println(j)
2 //来自System.out.println(geti())
1 //来自System.out.println(super.geti())
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。

OutOfParentPackage.java的代码如上图所示。
会出现的报错为"The type Parent is not visible"
在我看来,这个文件正如它的文件名,是Out Of Parent Package(在Parent包之外)的。
而定义Parent包的时候,没有任何修饰方法,那么系统就会默认访问权限为包访问。
所以,要使得OutOfParentPackage.java能够访问到Parent类,就应该使用public修饰Parent类为公共访问权限。
但此时仍会报错,问题在于Parent类中,i、j都是用protected(被保护的)方法修饰的。改为public修饰方法应该解决问题。
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
最根本的解决方法,就是把OutOfParentPackage.java放入com.parent包中,使其成为Parent类的子类,这样就符合protected的调用条件了。
Q2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?


Guess改造前和改造后的代码如上图所示:
对比两段代码,改造前,未使用抽象类,只能控制台输出
改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
写一个图形界面类来继承抽象类GuessGame,然后使用能够调用图形界面的语言来实现改造。
2.3 结合该例子,你觉得什么时候应该使用abstract?
当某些类中的方法尚未定义,我们可以给它一个抽象的定义
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
变化的是输入方法,或者说是操作平台,可以选择从控制台输入、从对话框图形界面输入等等。
不变的是这个例子的抽象方法,对于一个游戏来说,它的抽象方法就是游戏规则(从0~9猜一个数字),对于无论何种输入方法,都可以按游戏规则输出其所需结果(猜对了或者猜错了)。
Q3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
此接口强行对实现它的每个类的对象进行整体排序,简要的说就是用于让对象变为可比较的,然后实现对象的比较和排序。
关于Comarable接口和Arrays.sort的关系,在老师的PowerPoint中有下图的对Arrays的定义和二者的比较:


也就是说,在没有使用Comparable接口的排序类对象是不可以直接传入Arrays.sort进行排序的。
那么,我们就需要利用Comparable接口实现对对象的"强制转换"。
3.2 有了Comparable接口为什么还需要Comparator接口呢?
Comparable接口强制排序方式为自然排序,而Comparator接口可以自定义排序方式,在使用上更灵活。
对于二者使用上的区别,我引用PHP100互联网开发社区对二者的一段比较:
Comparator 和 Comparable 比较
Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。
而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
我们不难发现:Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
Q.4面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。

StudentDao接口:提供三个抽象方法,写入学生数据、读取学生数据和显示所有学生信息。
StudenDaoListImpl类:用列表来存放学生信息,用ArrayList的方法来完成排序。
Student类:存放名字,使用了Getter and Setter和toString方法,是StudentDaoArrayImpl类和StudenDaoListImpl类的父类。
StudentDaoArrayImpl类:readStudent(String) 读取学生信息;diplayAllStudent()遍历整个数组,没找到学生信息返回false,有则输出学生信息。writeStudent(Student )添加学生信息,添加成功后返回true。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
两个类的具体方法不同,StudenDaoListImpl是用ArrayList的方法实现存储,而而StudentDaoArrayImpl是用数组方法实现的。
Q.5什么是面向接口编程?面向接口编程的好处是什么?
结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

以上是我在Q4的Test.java中看到的老师给的注释,由这些注释,引出我个人对面向接口编程的观点。
·无需考虑后台数据类型,通过接口进行强制转换(我个人的理解就像要在投影仪上显示笔记本电脑的显示器内容需要VGA-HDMI转接器才能实现)
·代码整体比较有框架,结构感强。
·同第一点的例子,当投影仪引用电脑显示器时,只是调用了图像,而不会调用电脑的系统,这和接口编程的思想类似,上层和下层的关系只有接口调用,而不调用下层的类。
- 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录

3.2. PTA实验
5-1
此题需要利用Comparable接口对name排序,再重写compareTo方法,对Comparable进行改写,用于对象的名字的排序,调用方法Arrays.sort。
201521123028 《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 ...
随机推荐
- js单页hash路由原理与应用实战
什么是路由? 通俗点说,就是不同的URL显示不同的内容 什么是单页应用? 单页,英文缩写为SPA( Single Page Application),就是把各种功能坐在一个页面内. 那所谓的单页路由应 ...
- 《Java从入门到放弃》入门篇:springMVC数据校验
昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...
- 再起航,我的学习笔记之JavaScript设计模式11(外观模式)
经过一段时间的学习与分享,我们对创建型设计模式已经有了一定的认识,未来的一段时间里我们将展开新的篇章,开始迈入结构性设计模式的学习. 结构性设计模式与创建型设计模式不同,结构性设计模式更偏向于关注如何 ...
- Flow-Guided Feature Aggregation for Video Object Detection论文笔记
摘要 目前检测的准确率受物体视频中变化的影响,如运动模糊,镜头失焦等.现有工作是想要在框的级别上寻找时序信息,但这样的方法通常不能端到端训练.我们提出了flow-guided feature aggr ...
- Struts2之初识
Struts2教程 第一章 初识Struts2 主页:http://struts.apache.org/ 优势:用户请求,模块处理,页面展现.适用于企业级开发,便于维护. 配置:web.xml中添加的 ...
- linux 下 Fatal error: Class ‘mysqli’ not found in
先试用这种方法 http://blog.csdn.net/u010429424/article/details/43063211 我不知道自己安装的php 没他们路径,所以用了以下这种方法处理,并且不 ...
- 工作中git常用命令
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; line-height: 16.0px; font: 14.0px "PingFang SC" } ...
- python+selenium自动化软件测试(第1章):环境搭建,你也可以直接用Anaconda!
1.1 环境搭建 1.1.1 selenium简介Selenium 是用于测试 Web 应用程序用户界面 (UI) 的常用框架.它是一款用于运行端到端功能测试的超强工具.您可以使用多个编程语言编写测试 ...
- [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)
整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...
- winform 通过驱动注册ID检测是否已安装驱动
public bool IsRegistered() { string clsid = ConfigurationManager.AppSettings["clsid"]; //参 ...