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. LoadRunner+Android模所器录制脚本

    为了测试Android软件的服务端的功能,需要重现某些客户端操作,便于发现功能问题,性能问题.也方便客户端与本机服务端特别是服务端代码进行断点调试.这个时候需要对网络操作进行重现. loadRunne ...

  2. 浅谈Python在信息学竞赛中的运用及Python的基本用法

    浅谈Python在信息学竞赛中的运用及Python的基本用法 前言 众所周知,Python是一种非常实用的语言.但是由于其运算时的低效和解释型编译,在信息学竞赛中并不用于完成算法程序.但正如LRJ在& ...

  3. MySQL执行计划extra中的using index 和 using where using index 的区别

    本文出处:http://www.cnblogs.com/wy123/p/7366486.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  4. Windows常用功能

    删除文件或目录CMD命令: rd/s/q 盘符:\某个文件夹  (强制删除文件文件夹和文件夹内所有文件)del/f/s/q 盘符:\文件名  (强制删除文件,文件名必须加文件后缀名)

  5. javascript中的时间版运动

    前面的话 速度版JS运动是指以速度为参照,随着路程的变化,时间随之变化:而时间版JS运动是指以时间为参照,随着路程的变化,速度随着变化.相较而言,时间版JS运动更为常用.JQ的animate就是时间版 ...

  6. CentOS 7 服务器配置--安装Ftp

    #安装vsftp yum install -y vsftpd #将 /etc/vsftpd/user_list文件和/etc/vsftpd/ftpusers文件中的root这一行注释掉 #root # ...

  7. APP跨进程数据通信-访问手机联系人

    1. 简述 在实际开发中,常常需要进行不同应用程序之间的数据通信,例如读取联系人列表等等,ContentProvider就是Android提供的用于实现不同进程之间进行数据通信的类. ContentP ...

  8. java的引用数据类型,你知道吗???

    有些人很清楚java的八种基本数据类型,但说到java的引用数据类型就不清楚了. Java的数据类型分为两大类,即基本数据类型和引用数据类型,在基本数据类型中有8种 基本数据类型(逻辑型-boolea ...

  9. 关于原根的存在性及个数(Primitive Root Theorem)

    我在RSA学习总结的第三部分关于Mille-Rabin素数测试的正确性证明里需要用到此定理,由于证明太长,故另开一章于此.(为啥我说话突然文绉绉了Orz,可能是这周辩论打多了) 结论是对素数p,mod ...

  10. 如何在Win7安装U盘中加入USB3.0驱动的支持

    U盘安装系统出现鼠标键盘不能使用,在intel六代处理器平台,安装过程中会出现安装原生镜像不能识别或者鼠标键盘不能使用等情况,可以参考以下方法进行. 风险提示:重装或升级系统会导致系统盘数据丢失,建议 ...