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. Linux操作系统-命令-free

    在看过网友写的一篇名为<Buffer和Cache的区别>http://zhumeng8337797.blog.163.com/blog/static/1007689142011102447 ...

  2. Linux - 简明Shell编程10 - 管道(Pipe)

    脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 #!/bin/bash echo '##### Num ...

  3. C#多线程的用法3-线程间的协作Join

    在创建多线程应用程序时,如何确保线程间的协作往往比让线程工作更重要. 线程间的协作最简单的方式是采用Join来进行,如下: /// <summary> /// 多线程协作-Join方式 / ...

  4. [Python] wxPython 编辑框组件学习总结 (原创)

    1.总结 1.常用4种 编辑框 的构造 1.普通编辑框 单行输入的简单编辑框 (?为所在框的对象,同下) self.textBox = wx.TextCtrl(parent = ?) 2.密码编辑框 ...

  5. 一个项目经理对主流项目管理工具的对比:禅道VS华为软件开发云

    禅道与软件开发云对比分析报告 1. 产品介绍 禅道是易软天创出品的一款项目管理软件,集产品管理.项目管理.测试管理.文档管理.组织管理于一体,覆盖了项目管理和测试管理的核心流程. 华为软件开发云 (D ...

  6. expungeStaleEntries函数解析

    1 /** * Reference queue for cleared WeakEntries */ // 所有Entry在构造时都传入该queue private final ReferenceQu ...

  7. LAMP环境的搭建(三)----PHP7的安装

    centos自带的PHP源是5.4版本的.如果需要安装PHP 5.4 直接输入 yum install php -y 即可 因为PHP7性能巨大的提升,因此本文选择安装PHP7 如果已经安装过了php ...

  8. 后台生成EXCEL文档,自定义列

    后台生成EXCEL文档,自定义列 //response输出流处理 //设置编码.类型.文件名 getResponse().reset(); getResponse().setCharacterEnco ...

  9. 【Linux】用yum安装JDK(转)

    1.查看yum库中都有哪些jdk版本(暂时只发现了openjdk) [root@localhost ~]# yum search java|grep jdk ldapjdk-javadoc.x86_6 ...

  10. fatal error LNK1201:写入程序数据库“***.pdb”时出错;请检查是否是磁盘空间不足、路径无效或权限不够

    问题很简单,是因为你的程序正在运行,或者windbg工具在执行dump文件,文件被占用,所以无法写入: