201621123062《java程序设计》第六周作业总结
1. 本周学习总结
1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结。
注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。
思维导图:
1.2可选:使用常规方法总结其他上课内容。
1.匿名内部类的具体用法
2.Clone方法的使用,以及注意点(如将该方法声明为public,一定要实现Cloneable接口)
3.Lambda表达式的改写及其好处,如减少代码量。
2. 书面作业
2.1 clone方法
2.1.1 在test1包中编写Employee类,在test2包中新建一个Test类,并在其main中新建test1包中的Employee的对象,然后使用clone方法克隆一个新对象,能否成功?为什么?
答:不能
原因:
1..查看Object中的clone方法源代码:
protected native Object clone() throws CloneNotSupportedException;
可以发现该方法被定义为 protected,而 protected修饰的方法:
包内的任何类,及包外的那些继承了此类的子类才能访问
因此没有覆盖clone函数并声明为public的话,会出现克隆异常。
2.没有实现Cloneable接口。
2.1.2 如果要为自定义的类覆盖clone方法,需注意什么?
注意:因为Object中的clone方法是被修饰为protected的,而protected修饰的方法只有包内的任何类,及包外的那些继承了此类的子类才能访问,因此需要将自定义的类覆盖clone方法修饰为public。
2.1.3 Object对象中的toString, equals, hashCode方法都使用public修饰c,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?
原因:
利用protected修饰clone方法,是为了安全考虑。Object类中的clone方法是浅拷贝,如果是对象,它拷贝的只是这个对象的一个引用,而这个引用仍然指向那个对象,当我们改变这个引用的属性时,原来对象也会跟着改变。所以把修饰符定义为protected,这样想要在其他任何地方调用这个类的clone方法,这个类就必须去重写clone方法并且把修饰符改为
public,这样在任何地方都可以调用这个类的clone方法了。
个人理解:用protected修饰clone方法,如果子类去重写它,可以实现深拷贝,以防在其他地方随意调用后修改了对象的属性使原来的对象也发生改变。
2.2 内部类
2.2.1 使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目7-2。请贴图关键代码与运行结果,请在运行结果中出现你的学号与姓名。
关键代码:(接口一个用了匿名类,一个用了Lambda表达式)
运行结果:
2.2.2 分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代码 } };
关系:shapeComparator操作了Comparator接口。
查找资料:
new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
个人理解:要实现这个接口,主体Shape就需要重写接口中的方法。
2.2.3 题集:6-1(匿名内部类)实验总结。你觉得使用匿名内部类有什么好处?
总结:写这一题的时候整体来说就是对ActionListener监听器的不了解,大概百度了一下它的用法。在自动生成的public void actionPerformed(ActionEvent e)
方法里对其进行重写。在提交代码的时候,明明代码跟同学的提交正确代码是差不多的,但是我一直过不去。。后面我发现我混用了next()和nextline()。还有就是其中一个语句,我的逗号不是英文的。。。。现在还出现这种错误。。。我应该要细心一点。。特别是这种小小的细节。。。
好处:看了网上的一些资料,我就按照自己的理解说一下吧。有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,使用匿名内部类就比较合适,并且免去了取名字的烦恼。
2.3 PTA实验总结
3.3.1 PTA(自定义接口)。并回答:相比较不写接口,直接写一个类包含IntegerStack相应的方法来说,定义IntegerStac,然后定义其实现类这种方式有什么好处?
总结:这一题用到了栈,以前数据结构学过,还是比较容易写的,不过临界条件我每次都会忘记判断。。。后来在舍友的提醒下我发现了。。。还有就是,在定义IntegerStack接口时,里面应该包含几个方法,一开始我没有考虑清楚。
好处:我们可以用其他形式来实现这个功能,如使用数组,列表等来实现。(参考同学的回答)
3.3.2 PTA(静态内部类)。并回答:你觉得什么时候应该使用静态内部类?静态内部类与内部类有什么区别?
总结:这一题好像比较简单,主要就是注意一下输出的格式,还有内部类的一些定义。
使用:如果一个内部类不依赖于其外部类的实例变量,或与实例变量无关,则选择应用静态内部类。
区别:
嵌套类与普通的内部类还有一个区别:普通内部类的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段, 也不能包含嵌套类。但是在嵌套类里可以包含所有这些东西。也就是说,在非静态内部类中不可以声明静态成员,只有将某个内部类修饰为静态类,然后才能够在这个类中定义静态的成员变量与成员方法。
另外,在创建静态内部类时不需要将静态内部类的实例绑定在外部类的实例上。普通非静态内部类的对象是依附在外部类对象之中的,要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。静态类和方法只属于类本身,并不属于该类的对象,更不属于其他外部类的对象。
个人理解:静态内部类中只可以访问外部类的静态变量和静态方法,非静态内部类中不可以声明静态成员。
3.3.3 PTA(继承覆盖综合练习-Person、Student、Employee、Company)。并回答:使用Collections.sort对引用类型数组进行排序需要有一个什么前提条件?
总结:这一题的思路就是先写完题目要求的类及属性方法,在写Main函数。在处理Employee类的equals方法时,我一开始选择自动生成,而忽略了题目的要求,提交时就编译错误了,后来就拿同学正确的代码测试了一下我的函数,有些地方还是有问题的,修改完以后看起来还可以。
前提条件:要实现一个比较接口(如Comparable),然后根据题目要求重写比较的方法。
2.4大作业-继续完善(尝试使用接口改造你们的系统)
参考Case-StudentDao.zip案例
假设在不同的实现中,购物车里的商品有的是存放在ArrayList,有的是存放在数组中。
2.4.1 现在希望将系统中购物车的操作抽象到相应的DAO接口。
接口代码截图:
2.4.2 为该接口定义至少两个实现(如数组、列表、文件)。截图自己负责部分的关键代码,要求出现名字与学号。
关键代码:(用购物车类实现接口,本题参考网上部分代码,采用map遍历)
2.4.3 给出你们的Main程序,说明定义DAO接口的好处。
测试代码:
运行结果:(删除这一块还没有做完善。。。)
好处:定义了一个Dao接口后,我就可以用不同的形式去实现这个接口,比如我使用的是购物车类,也可以使用数组、列表等等,这一个接口有多种不同的表现方式,面向接口编程后,也不需要知道后台是用什么实现的,觉得封装性很好。
2.5代码阅读:PersonTest.java(abstract、多态、super)
2.5.1 画出类的继承关系
类图:
2.5.2 main函数的代码实现什么功能?
功能:对每个人按年龄升序排序然后输出。
2.5.3 如果将子类中的super构造函数去掉行不行?
答:不行。
查找资料发现:
调用子类的构造函数来生成子类对象的时候,一定要调用父类的构造函数。如果在子类里没有调用父类的构造函数,编译器会自动加一行代码:super(); 来调用父类里无参数的构造函数。
因此如果去掉了super,子类就无法调用父类的构造函数,就会提示错误。
2.5.4 PersonTest.java中哪里体现了多态?
体现:阅读代码可以发现,五个类中都有public String toString()
方法,但是里面的代码各不相同。同一表现,多种实现,这里就体现了多态。
3.码云及PTA
题集:jmu-Java-04-面向对象2-进阶-多态接口内部类
3.1. 码云代码提交记录
提交剩下的两题和系统代码。。。
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
排名:
PTA提交列表图:
3.3统计本周完成的代码量
周数 | 行数 | 新增行数 | 文件数 | 新增文件数 |
---|---|---|---|---|
1 | 57 | 57 | 5027 | 5027 |
2 | 400 | 400 | 10 | 10 |
3 | 508 | 508 | 23 | 13 |
5 | 609 | 609 | 31 | 8 |
6 | 612 | 612 | 40 | 9 |
7 | 584 | 584 | 46 | 6 |
201621123062《java程序设计》第六周作业总结的更多相关文章
- 201621123062《java程序设计》第九周作业总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 思维导图1:(对集合部分做了一些改动和细化) 思维导图2:(泛型) 1.2 选做:收集你认为有用的代码片段 代 ...
- 201521123027<java程序设计>第14周作业总结
1.本周作业总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2.书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己 ...
- Java ee第六周作业
JSF 生命周期: FacesServlet 充当用户和 JSF 应用程序之间的纽带.它在明确限定的 JSF 生命周期(规定了用户请求之间的整个事件流)的范围内工作. 1. 当JSF页面上的一个事 ...
- 201621123080《java程序设计》第六周作业总结
201621123080<java程序设计>第六周作业总结 1. 本周学习总结 2. 书面作业 clone方法 1.1 在test1包中编写Employee类,在test2包中新建一个Te ...
- 1903021116—吉琛—Java第六周作业—类的定义
项目 内容 课程班级博客链接 19信计班 这个作业要求链接 第六周作业链接 java面向对象的概念和定义 博客名称 学号-姓名-Java第六周作业-题目自拟 要求 每道题要有题目,代码(使用插入代码, ...
- 20175313 张黎仙《Java程序设计》第九周学习总结
目录 学号 20175313 <Java程序设计>第九周学习总结 一.教材学习内容总结 二.教材学习中的问题和解决过程 三.代码托管 四.心得体会 五.学习进度条 六.参考资料 学号 20 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20155302 2016-2017-2 《Java程序设计》第九周学习总结
20155302 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 基本数据库操作相关的JDBC接口或类是位于java.sql包中.在程序中要取得数据库联机,我 ...
- 20155334 2016-2017-2 《Java程序设计》第九周学习总结
20155334 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章:整合数据库 16.1 JDBC入门 JDBC(Java DataBase Conn ...
- 20155306 2016-2017-2 《Java程序设计》第九周学习总结
20155306 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 Java语言访问数据库的一种规范,是一套API ...
随机推荐
- python爬取youtube视频 多线程 非中文自动翻译
声明:我写的所有文章都是发在博客园的,我看到其他复制粘贴过去的 连个出处也不写,直接打上自己的水印...真是没的说了. 前言:前段时间搞了一些爬视频的项目,代码都写好了,这里写文章那就在来重新分析一遍 ...
- Xshell配色为ubuntu风格
背景 为了远程连接服务器,用Xshell作为连接工具,因为好(mian)用(fei),服务器是ubuntu的,因此看不习惯Xshell自带的黑白色,下面给出了ubuntu的配色方案,使用的时候直接导入 ...
- RobotFramework下的http接口自动化Get关键字的使用
在使用Create Http Context关键字创建了http的调用环境后,就可以使用Get关键字来发送一个http协议中最常用的get请求了. Get 关键字只接受一个url参数,该关键字的API ...
- 第二篇:数据可视化 - 基本API
前言 数据可视化是数据挖掘非常重要的一个环节,它不单在查阅了解数据环节使用到,在整个数据挖掘的流程中都会使用到. 因为数据可视化不单可以形象地展示数据,让你对数据有更好的总体上的了解,而且还可以让你清 ...
- js如何开发游戏(聊天篇)
公司最近有这方面的需求,期望我们能搞出点有趣的小游戏来帮助公司进行推广,公司没有专门做游戏开发的员工,很不幸这件事情掉到了前端头上. 我记得我以前在学习的时候曾经见过一些厉害的前端工程师编写过一些网页 ...
- python操作excel常用的方法
读操作模块安装 pip install xlrd 写操作模块安装 pip install xlwt xlrd读操作 1.打开excel xl = xlrd.open_workbook('test.xl ...
- Android 音视频编解码——YUV视频格式详解
一.YUV 介绍 YUV是一种颜色编码方方式,通常由彩色摄像机进行取像,然后把取得的彩色图像信号经过分色.分别放大校正后得到RGB,再经过矩阵变换得到亮度信号Y和两个色差信号B-Y(即U).R-Y(即 ...
- IDEA2017版本打可运行jar包并运行
一.打JAR包 JAR:From modules with dependencies 将依赖一起打包 一般依赖放在与xx.jar同级的libs文件夹中 敲黑板,下图第一个框是输出jar包的位置,第二 ...
- 2018 年 3 月 iOS 面试总结(上市公司,BAT)
序言: 今年2月中下旬因为个人原因,换了一份工作,3月初期间面试了有3,4家,基本都是D轮或者刚刚上市的公司,也有上榜的BAT,也从他们的面试笔试中看到了自己的一些不足,于是就想写出来和大家分享一下, ...
- ASP.NET Core Web 支付功能接入 支付宝-电脑网页支付篇
这篇文章将介绍ASP.NET Core中使用 开源项目 Payment,实现接入支付宝-电脑网页支付接口及同步跳转及异步通知功能. 开发环境:Win 10 x64.VS2017 15.6.4..NET ...