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转接器才能实现)
·代码整体比较有框架,结构感强。
·同第一点的例子,当投影仪引用电脑显示器时,只是调用了图像,而不会调用电脑的系统,这和接口编程的思想类似,上层和下层的关系只有接口调用,而不调用下层的类。
  1. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

3.1. 码云代码提交记录

3.2. PTA实验

5-1

此题需要利用Comparable接口对name排序,再重写compareTo方法,对Comparable进行改写,用于对象的名字的排序,调用方法Arrays.sort。

201521123028 《Java程序设计》第5周学习总结的更多相关文章

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

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

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

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

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

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

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

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

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

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. 【NO.2】Jmeter-安装Jmeter - 在Linux环境安装Jmeter - 在Windows环境安装Jmeter

    当配置完Jmeter运行的环境之后,就可以开始安装Jmeter了. 为什么既要告诉各位"在Linux系统内安装Jmeter",又要告诉各位"在Windows系统内安装Jmeter"?因为当我们在构建1 ...

  2. Qt图片按原比例缩放

    1.选择图片 QString strFilePath = QFileDialog::getOpenFileName(this, tr("Select file"), QStanda ...

  3. Leetcode Pasacl'sTriangle

    对于Vector的用法,实在是知道的太少,算法思想比较简单,核心也就一行代码,但是实现错误就显示平时代码的不熟悉. Given numRows, generate the first numRows ...

  4. iostat磁盘IO命令详解

    Linux IO 实时监控iostat命令详解 简介: 对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量.系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中 ...

  5. Gate One

    运维堡垒机介绍: 运维堡垒机的理念起源于跳板机.2000年左右,高端行业用户为了对运维人员的远程登录进行集中管理,会在机房里部署跳板机.跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台 ...

  6. HTML5 web存储

    既然涉及到HTML5知识,那么必定会存在一定的兼容性问题,这里就涉及到浏览器的支持情况了. 浏览器支持情况: Internet Explorer 8+, Firefox, Opera, Chrome, ...

  7. cat命令汇总整理

    Cat命令:一般用作打开文件,查看文件内容(可以一次查看多个文件),参数有如下几个: -a 或 –all,显示全部 -b 或--number-nonblank 对非空输出行编号 -n 或 --numb ...

  8. linux之有名管道

    有名管道1.查看命令:man 3 mkfifo 2.头文件:#include <sys/types.h> #include <sys/stat.h> 3.函数原型:int mk ...

  9. Java获取Object属性值

    做了一个拦截参数的需求,需要获取普通参数和对象参数 参数是Object类型,Object[] paramValues = pjp.getArgs(); 1.获取普通参数 ;i<paramValu ...

  10. 再起航,我的学习笔记之JavaScript设计模式15(组合模式)

    组合模式 组合模式(Composite): 又称部分-整体模式,将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 如果有一个 ...