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周学习总结的更多相关文章

  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. 对图像组成不了解?这样学习Matplotlib必走弯路!

    在学习Matplotlib的过程中,大家一定会遇到这样那样的问题,比如说,背景图怎么设置?坐标轴怎么设置?坐标轴上的刻度值怎么设置?怎样在PyQt中添加Matplotlib绘图模块? 其实想要学好用好 ...

  2. angularJS实战(一)

    angular实现列表 accessCtrl.js let AccessCtrl = function($scope, AlertService, DialogService, BigDataServ ...

  3. python——内置函数和匿名函数

    内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...

  4. python编码问题一点通

    一.了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的, ...

  5. JS网页特效操作流程——下拉菜单列表与登录注册弹窗效果

    下拉菜单列表 <style>        *{            margin: 0px;            padding: 0px;        }        .men ...

  6. 1、初识socket

    经过近一个半月的学习我们已经度过了python基础的阶段,今天我们开始学习python网络编程,没有难以理解的逻辑,更注重的是记忆. 对网络协议和基础没有概念的可以在阅读本文前预习计算机基础3.网络协 ...

  7. 7.31.2 this关键字

    this用在所有方法中:    用来区分局部变量和成员变量的名字二义性! 如:在set方法中这样写:name = name; 则java会遵循"谁近谁优先"的规则,会给局部变量赋值 ...

  8. 切诺夫界证明(Chernoff bound)

  9. 一起来学Go --- (go的枚举以及数据类型)

    枚举 枚举指一系列的相关的常量,比如下面关于一个星期的中每天的定义,通过上篇博文,我们可以用在const后跟一对圆括号的方式定义一组常量,这种定义法在go语言中通常用于定义枚举值.go语言并不支持众多 ...

  10. 用户管理-linux基础

    用户管理 useradd -u -g -G(附加组) ,-c -d -s -r(创建系统用户)   -M (不创建家目录)    思考:删除user1用户家目录,如何还原.        可以#cp ...