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 ...
随机推荐
- 对图像组成不了解?这样学习Matplotlib必走弯路!
在学习Matplotlib的过程中,大家一定会遇到这样那样的问题,比如说,背景图怎么设置?坐标轴怎么设置?坐标轴上的刻度值怎么设置?怎样在PyQt中添加Matplotlib绘图模块? 其实想要学好用好 ...
- angularJS实战(一)
angular实现列表 accessCtrl.js let AccessCtrl = function($scope, AlertService, DialogService, BigDataServ ...
- python——内置函数和匿名函数
内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...
- python编码问题一点通
一.了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的, ...
- JS网页特效操作流程——下拉菜单列表与登录注册弹窗效果
下拉菜单列表 <style> *{ margin: 0px; padding: 0px; } .men ...
- 1、初识socket
经过近一个半月的学习我们已经度过了python基础的阶段,今天我们开始学习python网络编程,没有难以理解的逻辑,更注重的是记忆. 对网络协议和基础没有概念的可以在阅读本文前预习计算机基础3.网络协 ...
- 7.31.2 this关键字
this用在所有方法中: 用来区分局部变量和成员变量的名字二义性! 如:在set方法中这样写:name = name; 则java会遵循"谁近谁优先"的规则,会给局部变量赋值 ...
- 切诺夫界证明(Chernoff bound)
- 一起来学Go --- (go的枚举以及数据类型)
枚举 枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用于定义枚举值.go语言并不支持众多 ...
- 用户管理-linux基础
用户管理 useradd -u -g -G(附加组) ,-c -d -s -r(创建系统用户) -M (不创建家目录) 思考:删除user1用户家目录,如何还原. 可以#cp ...