201621123033 《Java程序设计》第6周学习总结
第六次作业
1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结。

2. 书面作业
1. clone方法
1.1 在test1包中编写Employee类,在test2包中新建一个Test类,并在其main中新建test1包中的Employee的对象,然后使用clone方法克隆一个新对象,能否成功?为什么?
不能成功。查阅clone的源代码后发现它是被protected修饰的(如下图),不能跨包访问。需要重写clone方法才能正常调用

1.2 如果要为自定义的类覆盖clone方法,需注意什么?
- 需要实现Cloneable接口,表明这个类的对象具有克隆功能。
- 需用public修饰
- 当被克隆的类存在更为复杂的变量时,就必须clone彻底。
参考资料
1.3 Object对象中的toString, equals, hashCode方法都使用public修饰,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?
Object类中的clone方法,如果是对象,它拷贝的只是这个对象的一个引用,而这个引用仍然指向那个对象,所以当改变这个引用的时候,对象也会随着改变。所以用protected修饰的话,调用clone方法的时候,就必须去重写它,用public来修饰,就能在任何地方调用它而不会出现上述情况。
2. 内部类
2.1 使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目7-2。请贴图关键代码与运行结果,请在运行结果中出现你的学号与姓名。


2.2. 分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
shapeComparator通过使用匿名内部类实现了Comparator接口,并重写了compare方法。
2.3 题集:6-1(匿名内部类)实验总结。你觉得使用匿名内部类有什么好处?
本题的核心就是编写匿名内部类ActionListener,然后按照题目要求一步步编写即可(这部分就比较简单粗暴)。
好处:对于只需要使用一次的类,我们完全可以使用匿名内部类来编写,这样代码更加简洁。
3. PTA实验总结
3.1 PTA(自定义接口)。并回答:相比较不写接口,直接写一个类包含IntegerStack相应的方法来说,定义IntegerStack接口,然后定义其实现类这种方式有什么好处?
这题就是用java来编写栈,思路和以前数据结构差不多,只是写法不一样。当然常见的错误也和以前差不多,就是要注意栈满和栈空的情况,防止溢出。
定义IntegerStack接口的好处就是不管是数组还是ArrayList,只要实现该接口就能实现栈的功能,就和上次作业里例题StudentDao一个道理。
3.2 PTA(静态内部类)。并回答:你觉得什么时候应该使用静态内部类?静态内部类与内部类有什么区别?
该题主要就是静态内部类的编写。
静态内部类只能访问外部类的静态成员,new一个静态内部类不需要外部类成员,所以当内外部类联系不紧密,互相不用访问时就可以使用静态内部类。
区别:
- 静态内部类随着外部类的加载而加载,而不是随着外部类对象的产生而产生。也就是说,静态内部类的对象可以直接生成,而不像内部类需要通过生成外部类的对象来生成。
- 非静态内部类拥有外部类的所有非静态方法和非静态属性,而静态内部类不能访问外部类非静态的方法和属性。
参考资料:参考资料1,雨课堂课件。
3.3 PTA(继承覆盖综合练习-Person、Student、Employee、Company)。并回答:使用Collections.sort对引用类型数组进行排序需要有一个什么前提条件?
这题其实就相当于把前面的题目整合到一起,注意一下题目要求上的改动。
使用Collections.sort对引用类型数组进行排序的前提就是要实现Comparable或Comparator接口。
4.大作业-继续完善(尝试使用接口改造你们的系统)
参考Case-StudentDao.zip案例
假设在不同的实现中,购物车里的商品有的是存放在ArrayList,有的是存放在数组中。
4.1 现在希望将系统中购物车的操作抽象到相应的DAO接口。
Dao接口

4.2 为该接口定义至少两个实现(如数组、列表、文件)。截图自己负责部分的关键代码,要求出现名字与学号。
1.定义Dao接口(见上图)
2.使用ArrayList实现Dao接口

3.使用数组实现Dao接口

运行结果







4.3 给出你们的Main程序,说明定义DAO接口的好处。
main程序:

好处:定义Dao接口存放基本方法,这样无论是用ArrayList存放数据还是用数组存放数据,只要实现Dao接口的话就能够实现这些基本方法,更加灵活。
5. 代码阅读:PersonTest.java(abstract、多态、super)
5.1 画出类的继承关系

5.2 main函数的代码实现什么功能
创建四个对象后按年龄从小到大排序后输出。
5.3 如果将子类中的super构造函数去掉行不行?
不能。子类不能自然继承private修饰的属性也不能继承父类的构造函数,需要用super调用父类的构造函数。
5.4 PersonTest.java中哪里体现了多态?
PersonTest.java中,Person类、Student类、Employee类、Manager类、Progarmmer类中toString方法的覆盖体现了多态。
3.码云及PTA
题集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图


3.3 统计本周完成的代码量
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 3 | 547 | 547 | 12 | 12 |
| 5 | 971 | 424 | 20 | 8 |
| 6 | 1577 | 606 | 29 | 9 |
| 7 | 2187 | 1216 | 41 | 21 |
201621123033 《Java程序设计》第6周学习总结的更多相关文章
- 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 ...
随机推荐
- js另类值交换
当我们有a.b两个值,想要交换,通常是要声明第三个变量,但是我最近看到这样一种不用声明第三个变量的处理方法: var a=1,b=2; a=[b,b=a][0]; 其实还是在内存中开出了一个新的空间( ...
- background-position设置
设置背景图片的位置:background-position:x y; 其中x和y可以为百分比也可以为像素
- CSS-DOM
在所有的产品设计中,选择最适用的工具去解决问题是最基本的原则. ①使用(X)HTML去搭建文档的结构. ②使用CSS 去设置文档的呈现效果. ③使用DOM脚本去实现文档的行为. 文档中的每个元素都是一 ...
- 推荐优秀的开源GIS软件
推荐优秀的开源GIS软件(以后会补充) 从GIS入门到现在,我已经接触不少优秀的GIS软件,这里列出我使用过优秀的开源GIS软件. 桌面GIS软件: Qgis(基于Qt使用C++开发的跨平台桌面软件, ...
- Dijkstra&&Floyd
文章来源:(http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html) (以下内容皆为转载) Dijkstra算法 1.定义 ...
- python__高级 : 类当作装饰器
类在创建对象时,会调用 __init__ 初始化一些东西 , 然后 如果类中定义了 __call__ 方法,可以直接用 对象() 这种方法调用,所以可以用类来装饰函数: class Test(ob ...
- python-6面向对象编程
1-类和实例 class Student(object): def __init__(self, name, score):# _init__方法的第一个参数永远是self,表示创建的实例本身 sel ...
- JAVA-数组或集合
哈哈,今天我们来讲解一下有关于一些数组 或者是集合的知识点 1.ArrayList,LinkedList,Vector的区别 ArrayList,LinkedList,Vector都是实现List接口 ...
- 4.Mongodb数据查询2
1.limit &skip (1)Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 ...
- \r \r\n \t的区别
\n 软回车: 在Windows 中表示换行且回到下一行的最开始位置.相当于Mac OS 里的 \r 的效果. 在Linux.unix 中只表示换行,但不会回到下一行的开始位置. ...