201621123031 《Java程序设计》第6周学习总结
作业06-接口、内部类
- 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

1.2 可选:使用常规方法总结其他上课内容。
关于lambda表达式:
- 1.对于Lambda表达式,其官方解释为
a function (or a subroutine) defined, and possibly called, without being bound to an identifier。
也就是说它是一个不用绑定标识符的可以被定义和调用的函数。
- 2.基本语法:
(parameters) -> expression
(parameters) ->{ statements; } - 3.Lambda表达式具有很好的简化代码的功能,pta的第二题中,我们可以将Comparator接口使用下面的Lambda表达式来实现。这样只用两行就实现了两个方法的排序,可以说是相当方便了。
Arrays.sort(p, (PersonSortable2 o1, PersonSortable2 o2) -> (o1.getName().compareTo(o2.getName())));
Arrays.sort(p, (PersonSortable2 o1, PersonSortable2 o2) -> (o1.getAge()-o2.getAge()));
- 书面作业
1. clone方法
1.1 在test1包中编写Employee类,在test2包中新建一个Test类,并在其main中新建test1包中的Employee的对象,然后使用clone方法克隆一个新对象,能否成功?为什么?
答:不能成功,因为通过查询Object类中的clone方法的源代码可以看出,clone方法是被protected修饰的,不能在其他包内被访问。需要重写Object类的clone方法才可以正常使用。

1.2 如果要为自定义的类覆盖clone方法,需注意什么?
- 覆盖clone()方法时应将方法声明为public。
- 覆盖clone方法时要记得调用super.clone()。
- 实现clone()方法时,我们不仅要clone类中的对象,还要将对象的引用变量也都clone出来以达到深克隆。
- 必须实现Cloneable接口!必须实现Cloneable接口!必须实现Cloneable接口!
1.3 Object对象中的toString, equals, hashCode方法都使用public修饰,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?
答:使用protected修饰clone方法主要是为了其安全性考虑。我们知道Object类中的clone方法只是浅拷贝,它对于对象的拷贝只是拷贝了对象的一个引用,这样的话,当我们改变这个引用时,原先的对象的值也会跟着改变,如果用public来修饰clone方法,那么在任何地方都能随意调用这个方法,然后通过修改拷贝后的对象而改变原对象,可以说是非常可怕了……而如果用protected修饰的话就可以让子类去重写它,实现深拷贝,防止上述的事情发生。
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的匿名内部类,之前没省清题意,导致写成了MyStarter类的匿名内部类导致编译错误……其他的就是简单的循环输出方法。
使用匿名内部类的主要好处就是减少了代码量,对于只要使用一次的类,完全可以用匿名内部类来代替,而不用再去多写一个类来实现,可以让我们的代码更加的简洁方便。
3. PTA实验总结
3.1 PTA(自定义接口)。并回答:相比较不写接口,直接写一个类包含IntegerStack相应的方法来说,定义IntegerStack接口,然后定义其实现类这种方式有什么好处?
答:这题主要要注意的就要要记得判断栈满和栈空的情况,如果没有判断,就会报出数组越界的错误。
将IntegerStack定义为接口的好处就是,我们可以不仅仅以一种形式来实现这个功能,我们可以使用数组,也可以使用列表来实现。提高了程序的性能。
3.2 PTA(静态内部类)。并回答:你觉得什么时候应该使用静态内部类?静态内部类与内部类有什么区别?
答:这一题主要要注意静态内部类的调用要用外部类名.静态内部类来调用。
静态内部类在代码的测试中可以起到很大的作用。为了方便说明,在这找了一个例子。
在进行代码程序测试的时候,如果在每一个Java源文件中都设置一个主方法(主方法是某个应用程序的入口,必须具有),那么会出现很多额外的代码。而且最主要的时这段主程序的代码对于Java文件来说,只是一个形式,其本身并不需要这种主方法。但是少了这个主方法又是万万不行的。在这种情 况下,就可以将主方法写入到静态内部类中,从而不用为每个Java源文件都设置一个类似的主方法。
另外,如果一个内部类不是静态内部类,那我们在定义它的属性和方法的时候是不可以被定义成静态成员变量和静态成员方法,简单来说就是非静态内部类中不可以声明静态成员。
不过静态内部类的访问方面的限制有蛮多的,比如我们不可以从一个静态内部类中访问外部类的非静态成员的属性和方法,所以静态内部类使用的范围并不像其他内部类那么广泛。
静态内部类和内部类的主要区别就是生成时不需要外部类的成员,静态内部类的对象不需要通过外部类对象来生成,可以直接使用外部类类名.静态内部类类名生成(例:Outer.Inner s = new Outer.Inner())。
3.3 PTA(继承覆盖综合练习-Person、Student、Employee、Company)。并回答:使用Collections.sort对引用类型数组进行排序需要有一个什么前提条件?
答:这题对我来说比较困难的就是各个类的equal()方法的实现,要考虑的因素太多,一不留神就忘了某一个。其他的就是按部就班照着步骤就好。
Collections.sort对引用类型数组进行排序的前提条件是要实现一个比较接口(Comparable、Comparator)并重写其中的比较方法。
4.大作业-继续完善(尝试使用接口改造你们的系统)
假设在不同的实现中,购物车里的商品有的是存放在ArrayList,有的是存放在数组中。
4.1 现在希望将系统中购物车的操作抽象到相应的DAO接口。

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




使用数组实现DAO接口:




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


DAO(Data Access Object)接口是一个数据访问接口,当我们实现了这个接口,我们可以通过这个接口来编写不同的类,使用不同的方法来实现数据的存储。例如上面,我们就通过了DAO接口实现了用列表和数组来存储数据。
5. 代码阅读:PersonTest.java(abstract、多态、super)
5.1 画出类的继承关系

5.2 main函数的代码实现什么功能?
答:main函数中实现了将创建的四个对象按年龄大小进行升序排序并输出结果。
5.3 如果将子类中的super构造函数去掉行不行?
答:不可以,首先,我们要先明白一个道理:子类不仅无法自然的继承private成员,也无法继承构造函数,所以,这就需要我们用到super关键字来调用其父类的构造函数,如果没有调用父类的构造函数则会报出Implicit super construct xxx is underfined 的错误信息。不过对于某些无参的构造函数,还是可以不用显式的写出super调用的。
5.4 PersonTest.java中哪里体现了多态?
答:在PersonTest.java 中,对于Person类、Student类、Employee类、Manager类、Programmer类中的toString()方法的覆盖体现了多态性。
3.码云及PTA
题集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)



3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。

这周事情有点多,然后也没有新的pta可以写,所以代码量偏少了emmmm
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 2 | 607 | 607 | 15 | 15 |
| 3 | 1642 | 1035 | 33 | 18 |
| 5 | 2044 | 402 | 42 | 9 |
| 6 | 2874 | 830 | 57 | 15 |
| 7 | 3161 | 287 | 63 | 6 |
201621123031 《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 ...
随机推荐
- iOS学习——自动定位
最近在项目中需要做自动定位功能,就是你在参加会议通过扫描二维码签到的时候自动定位并将你的定位信息在签到中上传,这样可以避免我们进行假签到.在这个功能中,主要用到的是系统自带的定位模块,首先我们是需要配 ...
- [CodeVS2370] 小机房的树 (LCA, 树链剖分, LCT)
Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花 ...
- 由html,body{height:100%}引发的对html和body的思考
html,body{height:100%} 今天看到一个CSS样式:html,body{height:100%},第一次看到,感觉挺奇怪,为什么html还需要设置height:100%呢,html不 ...
- 什么是tcp/ip
在了解Tcp /Ip之前.我们需要了解几个名词的含义: 什么是IP? IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层---TCP或UDP层:相反,IP层也 ...
- java接口----继承(实现)方法
文中"实现"一词特指接口的继承. 一个类实现多个接口时,不能出现同名的默认方法. 一个类既要实现接口又要继承抽象类,先继承后实现. 一个抽象类可以继承多个接口(implements ...
- SQL Server The target database ('db') is in an availability group and currently does not allow read only connections. For more information about application intent, see SQL Server Books Online.
一.问题概述 在错误日志中看到非常多的alwayson群集只读连接错误,错误信息的描述为“目标数据库位于可用性组,当前不允许通过read only连接”.错误日志如下: 当前的业务系统使用监听ip对数 ...
- 使用uiautomation自动化重命名pdf书签,使全大写字母变成首字母大写
今天下载了一个英文pdf书籍,但书签全是大写英文字母,看上去有点别扭,于是想办法用自动化重命名pdf书签, 使书签全部变成首字母大写. pdf原始书签如下图: 重命名后的pdf书签 自动化动态效果图, ...
- ACM搜索问题盘点
深度搜索:棋盘问题,详见http://poj.org/problem?id=1321 //#include<bits/stdc++.h> #include<cstdio> #i ...
- 堆排序(Java数组实现)
堆排序:利用大根堆 数组全部入堆,再出堆从后向前插入回数组中,数组就从小到大有序了. public class MaxHeap<T extends Comparable<? super T ...
- business expressions(二)
1,to give someone a heads up = to inform someone about something important ("heads up") be ...