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

2. 书面作业
Q1.代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
| 错误 | 纠正 | 分析 |
|---|---|---|
| System.out.println(i) | 可将定义i的权限改为protected或public | i是被private定义的,不可调用 |
输出结果为:1 2 2 1 2 1
1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
| 错误 | 纠正 | 分析 |
|---|---|---|
| showParentj(Parent p) | 将parent改为public属性 | parent这个类不是public权限,因此只能在同一个包中调用 |
| p.j or p.geti() | 最好把变量改private,为其设置public的getter和setter,不要直接调用这个变量,只调用getter和setter | 即使parent是public,这两个也不可以调用,因为protect修饰的只允许同一个包或者不同包的子类调用 |
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
答:同一个包中,子类可访问,不在同一个包中,只能通过子类的引用。因为protected修饰的属性或方法只允许同一个包或者不同包的子类调用。
Q2.abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
答:改造后程序灵活性大,更加满足实际需求,改造前只能在控制台输出,改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入,实现方式增加。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
答:设计一个图形界面并进行继承之前规定好的抽象类,将抽象方法进行重写
2.3 结合该例子,你觉得什么时候应该使用abstract?
答:在一些项目中需要多人合作的情况下,每个人完成自己的部分,最后在整合一起。负责前期项目框架搭建的人这时就可以先用abstract先定义好一些方法,具体实现方法的内容交给其他人来做。
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
答:变化的有,输入输出的值,界面,控制台等,不变的是abstract定义的抽象类,抽象方法,都需要一个子类去继承,实现它们。
Q3.Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
答:Comparable接口可以抽象出需要比较的类之间的共同特性,具体体现在都要拥有compareTo方法,及拥有共同的行为。
所有实现Comparable的对象都有一个共同的特性-可以被比较,具体体现在均拥有compareTo方法, 即拥有共同的行为!
实现Comparable接口后,Arrays.sort就可对基本数值类型数组进行排序
3.2 有了Comparable接口为什么还需要Comparator接口呢?
答:即使两个对象没有实现Comparable接口,也可以比较。只需要在具体比较的属性时用Comparator接口就行,可以省略很多代码,更加简便。
Q4.面向接口案例分析
阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。

- StudentDao(interface):提供三个抽象方法,写入学生数据、读取学生数据和显示所有学生信息。对于写入学生数据,通过一个boolean变量来判断是否写入成功。
- StudentDaoArrayImpl类:用数组来存放学生信息,具体实现接口的三个抽象方法,读取学生信息,如果找不到返回null;如果遍历整个数组,没找到学生信息返回false。显示所有学生信息则要求对象都是非空的。
- StudenDaoListImpl类:用列表来存放学生信息,具体实现接口的三个抽象方法。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
答:StudenDaoListImpl是用ArrayList实现的,而StudentDaoArrayImpl是用数组实现的。
Q5.什么是面向接口编程?面向接口编程的好处是什么?
结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
面向接口编程:
所谓面向接口编程,就是代码与接口相关联的(比如Comparable接口),而不需要考虑具体的实现类。
只要某个类(如Employee)实现了相关的接口(如Comparable),我们编写的面向接口(如Comparable)的代码就可以适用。
好处:
面向接口编程可以将接口与实现相分离,从而大大提高程序的灵活性
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Student[] students = new Student[3];
students[0] = new Student("Tom");
students[1]= new Student("Jerry");
students[2] = new Student("Sophia");
StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现
//StudentDao sdm = new StudenDaoListImpl();//使用列表实现
//往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
//因为这里是面向StudentDao接口
System.out.println("===========写入学生========");
for(Student e:students){
if (!sdm.writeStudent(e)){
System.out.println("添加学生失败");
}else{
System.out.println("插入成功!!");
}
}
System.out.println("===========显示所有学生========");
sdm.diplayAllStudent();
System.out.println("===========查询学生========");
Student temp = sdm.readStudent("Tom") ;
if(temp == null){
System.out.println("查无此人");
}else{
System.out.println(temp);
}
}
}
类似于制定了一个程序框架,只有实现者和调用者都遵循“面向接口编程”这个准则,完成框架任务,而暂时不用管具体如何实现,提高协作效率和扩宽协作方式,制定者的协调目的才能达到,此代码中StudentDao sdm = new StudentDaoArrayImpl(50);与StudentDao sdm = new StudenDaoListImpl();无论哪一个被注释,另一个同样可以调用接口中所有方法。
3. PTA实验总结及码云上代码提交记录
3.1本周Commit历史截图
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示

3.2 实验总结
- 继续完成前面未完成的实验面向对象1-基础-封装继承
- 函数(选做:4-1)、编程(5-1, 5-2)
- 一定要有实验总结
答:
5-1:
基本操作就是PersonSortable实现Comparable接口,然后重写compareTo()方法。
遇到的难点是,编写compareTo()方法时遇到麻烦,其中对name的比较不能用“>”,“<”,“==”,而对age就能,我觉得可是因为name是String类型,而age为int类型。修改后代码为:
public int compareTo(PersonSortable s) {
if (this.name.compareTo(s.name) == 0) {
return this.age > s.age ? 1 : -1;
}
return this.name.compareTo(s.name);
}
5-2:
基本与第一题类似,只不过是重写编写编写NameComparator类与AgeComparator类,分别实现对name和age进行升序排序,没遇到问题。
原先曾试过课堂上老师提过的匿名内部类方法编写,也可以成功输出,代码为:
Arrays.sort(s, new Comparator<PersonSortable2>() {
public int compare(PersonSortable2 arg0, PersonSortable2 arg1) {
// TODO Auto-generated method stub
return arg0.getName().compareTo(arg1.getName());
}
});
for (PersonSortable2 t : s) {
System.out.println(t);
}
201521145048《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 ...
随机推荐
- 前端到后台ThinkPHP开发整站(3)
继续我的这个项目的第三晚的开发了,时间比较少,今晚写的代码不多,今晚仍然是造轮子写一个公共的控制器和一个公共的JS.直接上代码吧! 以下是一个公共的控制器,后台控制器都继承于它,构造函数中进行验证当前 ...
- 关于"软件评测师"
参考书目 <软件评测师考试考点分析与真题详解>http://item.taobao.com/item.htm?spm=a1z09.2.9.82.qx67QK&id=18924026 ...
- Lenovo T440p 外放没有声音
背景:Lenovo T440p,今天突然想听会歌 外放竟然没声音,fuck!!! 任务栏声音图标也没有静音标志. 驱动出问题了?检查下驱动,正常. 找了耳机试下,正常,看来驱动真的没问题. 喇叭坏了? ...
- SQL SERVER镜像切换
--SQL SERVER镜像切换 ------------------------------2013/11/30 切换条件 高性能 没有见证服务器的高安全性模式 具有见证服务器的高安全性模式 自 ...
- LINUX系统自动化部署shell脚本
#!/bin/shsudo /etc/init.d/tomcatstopwaitsudo rm -rf /opt/tomcat7/work/*waitsudo rm -rf /opt/tomcat7/ ...
- 常见C/C++笔试、面试题(二)
我自己总结过一些常见的C++面试题,那个是基于一个同学的腾讯面经所问问题,再加上知识点扩展进行了总结,这个是网上之前就有的版本,比较基础,有些题目总结一下,不能忘了基础: 1.求下面函数的返回值( 微 ...
- java微信公众平台开发
微信公众平台的开发,总体说来也是简单的,就是先大概看下微信公众平台接口文档. 请先大概浏览一下API手册,我们会发现,推送给微信服务器的数据有两种:xml的形式,和json的形式. 那么什么时候是XM ...
- CODE大全给你推荐几个免费的leapftp 注册码
leapftp 2.7.6 注册码, Name: Kmos/CiA in 1999 s/n: MOD1-MO2D-M3OD-NOPQ LeapFTP2.7.5 注册名:swzn 注册码:214065- ...
- Python教程百度网盘哪里有?
Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作"内置电池(batteries included)".带你快速入门的Py ...
- 七字真言解读TCP三次握手
三次握手所谓的"三次握手"即对每次发送的数据量是怎样跟踪进行协商使的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送.接收完毕后何时撤消联系,并建立虚连接. 一.七 ...