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 ...
随机推荐
- jQueryGantt与DHTMLX-Gantt的对比
对比内容|jQueryGantt|DHTMLX-Gantt 本地化(语言)|封装了语言包,(仅英语)要想改变要重新编写|支持多种语言包,并且形成了完整的css文件 皮肤|只有一套现成的皮肤,逍遥该表喲 ...
- instanceof问题
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法:resu ...
- windows域与工作组概念
局域网上的资源需要管理,“域”和“工作组”就是两种不同的网络资源管理模式.那么二者有何区别呢? 工作组 Work Group 在一个网络内,可能有成百上千台电脑,如果这些电脑不进行分组,都列在“网上邻 ...
- 移动端为何不使用click而模拟tap事件及解决方案
移动端click会遇到2个问题,click会有200-300ms的延迟,同时click事件的延迟响应,会出现穿透,即点击会触发非当前层的点击事件. 为什么会存在延迟? Google开发者文档中有提到: ...
- 创建第一个简单的AI分类器
from sklearn import tree# 第一个简单的分类器features = [[140, 1], [130, 1], [150, 0], [170, 0]] #列表左边的变量代表水果的 ...
- 优先级队列Priority_queue
定义 拥有权值观点的queue,,一个是返回最高优先级对象,一个是在底端添加新的对象.这种数据结构就是优先级队列(Priority Queue) . 实现 利用max_heap完成,以vector表现 ...
- MAC下pyenv和pyenv-virtualenv插件初探
为什么会使用pyenv和pyenv-virtualenv插件 一般mac自带一个python版本,称为系统版本.对于开发者而言,肯定不够用啦.所以需要在同一个mac上组建不同的开发环境并且不会冲突. ...
- php文件上传提示错误:找不到临时文件夹
"找不到临时文件夹",不可能啊,该项目的tmp目录已经创建好了呀. 感觉不对劲,运行自己写过的代码,发现也提示这个错误.确实不对劲,以前能上传成功的代码,现在却不能用了. 百度下, ...
- Python读写文件的路径,关于os.chdir(path)位置对程序的影响,
关于os.chdir(path)位置对程序的影响,import os import time#直接把path放到open()里面 def fu0(): star = time.time() for i ...
- destoon源码分析一
#0x01 先记录一些之前模糊的小知识点,补充一下 set_magic_quotes_runtime() -- 设置magic_quotes_runtime配置激活状态(php 5.3 被弃用,php ...