1. 本周学习总结

1.1 尝试使用思维导图总结有关多态与接口的知识点。

1.2 可选:使用常规方法总结其他上课内容。

答:关于接口:

1.接口是一种抽象,抽取出了共同行为;

2.能够更加清晰地把系统的实现细节与接口分离,调用时只需要关心接口就行了;

3.接口是用于描述系统对外提供的所有服务,客户只需要针对接口编程即可。

2. 书面作业

1. 代码阅读:Child压缩包内源代码

1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。

答:代码如下:

package parent;

public class OutOfParentPackage{
public static void showParentj(Parent p){
System.out.println(p.j);
System.out.println(p.geti());
p.getj();
}
}
class Parent{
private int i=1;
protected int j=2;
protected int geti(){
return i;
}
public void getj(){
System.out.println(j);
}
}
class Other{
public static void showParentj(Parent p){
System.out.println(p.j);
System.out.println(p.geti());
} }
public class Child extends Parent{
public static void main(String[] args){
Parent p = new Parent();
Child c = new Child();
c.getParenti();
c.getParentj();
Other.showParentj(p); }
public void getParenti(){
System.out.println(i);
}
public void getParentj(){
System.out.println(super.j);
System.out.println(j);
System.out.println(geti());
System.out.println(super.geti());
}
}

1.com.parent包中Child.java文件不能编译通过;

2.System.out.println(i);这一句会出错;

3.因为Parent()中的I被private(类外部无法对其直接访问)修饰,子类无法访问;

4.将private int i=1;改为protected int i=1;

1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。如何更改才能使之正常编译?

答:

1.另外一个包中的OutOfParentPackage.java不能编译通过;

2.提示的错误是The type Parent is not visible;Parent类无法访问;

3.原因是parent()没有被public修饰,系统默认只能在包内被访问,而OutOfParentPackage在包外,无法访问parent();

4.给parent()加上public关键字。

2. abstract进阶:阅读GuessGame抽象类的设计与使用源代码

2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?

答:

1.改造前,未使用抽象类,只能控制台输出;

2.改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入,能够更加清晰地把系统的实现细节与接口分离,只需要针对抽象类编程即可。

2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?

答:设计一个用来猜数字的图形界面的类继承Guess中的抽象类,在图形界面进行输入输出的操作。

2.3 结合该例子,你觉得什么时候应该使用abstract?

答:抽象类就应该使用abstract进行修饰,这个类将不能生成对象实例,可以做为对象变量声明的类型。

2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。

答:

1.变化的是输入输出环境(控制台、对话框、图形界面等);

2.没有变化的是抽象类(abstract),即输入输出是为了完成猜数游戏,与具体的环境无关,就像通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。

3. Comparable与Comparator

3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?

答:

1.通过接口可以实现不相关类的相同行为,让一个类具有了各种无限的可能,并且相同接口的类,不一定要有继承关系;

2.所有实现Comparable的对象都有一个共同的特性:可以被比较,Arrays.sort就是面向Comparable接口进行编程,所以实现了Comparable接口就可以直接使用Arrays.sort对其进行排序。

3.2 有了Comparable接口为什么还需要Comparator接口呢?

答:Comparable接口和Comparator接口都可以用来实现集合中元素的比较、排序,但ComparableComparable 定义在 Person类的内部,是在集合内部定义的方法实现的排序,Comparator定义在Person的外部,是在集合外部实现的排序,Comparable接口是一个对象本身已经支持自比较所需要实现的接口。

3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。

4. 面向接口案例分析

阅读Case-StudentDao.zip案例

4.1 画出类关系图,描述每个类与接口的作用。

答:

Student类:初始化String name,被StudentDaoArrayImpl和StudenDaoListImpl引用;

StudentDaoArrayImpl类:对StudentDao接口操作,用数组来存放学生信息,包含方法Student readStudent(String name) 、boolean writeStudent(Student student) 和void diplayAllStudent();

StudenDaoListImpl类:对StudentDao接口操作,用列表来存放学生信息,包含方法Student readStudent(String name) 、boolean writeStudent(Student student) 和void diplayAllStudent();

4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?

答:StudenDaoListImpl是ArrayList(动态)的,大小可以随student的改变而改变;而StudentDaoArrayImpl是用数组实现的,数组的大小和数据类型都已经固定了。

5. 什么是面向接口编程?面向接口编程的好处是什么?

结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!

答:

什么是面向接口编程:个人理解是使用同一个方法解决不同问题,定义一个类,使得其他引用对象不需要再次编程就能实现功能,简化了编程过程,提高效率,节省时间,类似于造一架飞机,坐飞机的人不需要知道这架飞机是怎么造出来的,也能乘坐这架飞机到达目的地;

为什么要用接口 :用于处理多变的情况,接口在实际开发过程中最大好处是,可以按照设计,先把接口写好,然后在具体实践的时候,可以用已经写好的接口去实现具体功能,再写那些已经写好但是没有具体的代码的接口,这样可以提高工作效率。

6. 结对编程:面向对象设计(大作业2-非常重要)

内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。

写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面

形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。

注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。

选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。

参考资料:

结对编程参考资料

可以使用Processon画图

第6题提交作业的结构:

6.1

学生A 学生B 项目地址
http://git.oschina.net/dfcat http://git.oschina.net/gemola http://git.oschina.net/dfcat/java

我从另一个项目里直接拉了个人过来,还没开始做。。。

6.2 常用功能描述框架图

6.3 关键代码

6.4 运行界面

3. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类

3.1. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2. PTA实验

继续完成前面未完成的实验面向对象1-基础-封装继承

函数(选做:4-1)、编程(5-1, 5-2)

一定要有实验总结

答:由于Arrays.sort不能对自定义对象进行排序,我就想把PersonSortable类的数据用toString强制转换成字符串进行比较,用Comparable接口使得Arrays.sort生效。

201521123001《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. CSS3基础(3)——CSS3 布局属性全接触

    一. 弹性盒模型 1.弹性盒子模型介绍 弹性盒模型(Flexible Box或Flexbox)是一个CSS3新增布局模块,官方称为CSS Flexible Box Layout Module,用于实现 ...

  2. iOS的阴影绘制及性能优化

    今天来讲讲iOS开发过程中的阴影绘制及其潜在的绘图性能问题.虽然在开发过程中,我们使用阴影功能的机会不是很多,但是如果用了,有可能引起如卡顿等性能问题,所以,还是有必要来探究一下阴影的绘制过程,及如何 ...

  3. DLL基础

    Visual C++在创建DLL导出函数时,可能会对原始的函数名做修改.例如: int WINAPI Add(int nLeft, int nRight) 导出后的函数名称是_Add@8. 下面两种方 ...

  4. datagrid实现行的上移和下移(转)

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  5. Eclipse自动生成返回值对象的快捷键是什么?

    如下代码 List<ShareholderEntity> shareList = fetch.parseShareHolder(data); 如何自动生成 List<Sharehol ...

  6. 【Ubuntu Desktop】安装主流桌面

    ubuntu的桌面环境实在多,在这里选了几款主流的桌面环境,大家可以按需安装使用. 1.GNOME 2 Classic 经典老界面 gnome2   after reboot,choose GNOME ...

  7. 怎样查看当前QQ的版本号是多少

    怎样查看当前QQ的版本号是多少.. -------------- -------------

  8. 让Win10显示系统中隐藏的文件夹

    让Win10显示系统中隐藏的文件夹.. ------------------------- -----------------------

  9. python-opencv在有噪音的情况下提取图像的轮廓

    对于一般的图像提取轮廓,这篇博文介绍了一个很好的方法,但是对于有噪声的图像,并不能很好地捕获到目标物体. 比如对于我的鼠标,提取的轮廓效果并不好,因为噪声很多: 所以本文增加了去掉噪声的部分. 首先加 ...

  10. js中匿名函数

    今天碰到一道题,里面既包含了匿名函数的知识,也包含了预编译,函数的传参(形参),感觉迷迷糊糊的,所以想着做个总结. var foo={n:1}; (function(foo){ console.log ...