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 ...
随机推荐
- 使用Spring Boot快速构建基于SQLite数据源的应用
为了提供一个单包易部署的服务器应用,考虑使用Spring Boot,因为其集成了Apache Tomcat,易于运行,免去绝大部分了服务器配置的步骤. 项目初始化 首先从mvn archetype:g ...
- 在实现从excel中读取数据作为接口参数遇到的问题
这个算我自己第一次使用python语言实现 一个功能 一.首先我们先要代码实现如何从excel上读取数据python实现还是比较简单的 1.我使用的是xlrd模块,我们先要安装这个包,这样我们才可以使 ...
- Thinkpad T450 Linux Mint(Ubuntu) 安装Nvidia显卡驱动
事件背景 前段时间从Ubuntu切换到了LinuxMint,想尝尝鲜. LinuxMint是基于Ubuntu改良的,放弃了Ubuntu的Unity界面,更加易用,更加适合我这样的小白人员.本文也适用于 ...
- IPV6与IPV4的区别
IPv4协议的地址长度是32位,IPv6协议的地址长度是128位. 1.表示方式 IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位以十进制数显式,中间用点号分隔. 而IPv6采 ...
- asp.net core MVC 过滤器之ActionFilter过滤器(二)
本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core ...
- Springmvc+mybatis的定时器配置文件spring-quartz.xml
<!-- 定时器配置文件---.xml 一个cron表达式有至少6个(也可能是7个)由空格分隔的时间元素.从左至右,这些元素的定义如下: 1.秒(0–59) 2.分钟(0–59) 3.小时(0– ...
- 记一次Spring aop的所遇到的问题
由来 项目中需要实现某个订单的状态改变后然后推送给第三方的功能,由于更改状态的项目和推送的项目不是同一个项目,所以为了不改变原项目的代码,我们考虑用spring的aop来实现. 项目用的是spring ...
- opencv VideoCapture使用示例
在centos7下验证VideoCapture功能. 1 opencv处理视频时要使用ffmpeg,这里使用添加源的方式安装,分为3步 1.1 先安装EPEL Release,使用其他的repo源,所 ...
- When Startup Disk is Full
参考自What To Do When Your Mac's Startup Disk is Almost Full Delet——Empty Trash
- JS小福利 —— 实时更新的页面小时钟
今天小女刚学会了一个好玩的小玩意儿~~特来跟大家分享一下~~~ 这是一个有趣的时钟显示程序,可以进行实时的年月日.星期.时分秒更新,有了这组小代码,以后可以作为日期插件应用在大型的JS代码中哦~~ 积 ...