201621123086 《Java程序设计》第6周学习总结

1. 本周学习总结

1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图或相关笔记,对面向对象思想进行一个总结。

1122312-20171026184714680-1384065655.png


2. 书面作业

1. clone方法

1.1 在test1包中编写Employee类,在test2包中新建一个Test类,并在其main中新建test1包中的Employee的对象,然后使用clone方法克隆一个新对象,能否成功?为什么?

答: 不能成功

  • 首先,对于另一个包没有进行import引入
  • 即使引入,因为clone方法是protected修饰的,所以包外无法使用,会出现The method clone() from the type Object is not visible,此方法不可见
    1122312-20171026202920461-413356461.png

1.2 如果要为自定义的类覆盖clone方法,需注意什么?

  • clone方法覆盖为public
  • 注意实现目标是深拷贝还是浅拷贝
  • 要调用super.clone()方法
  • 需要实现cloneable接口

1.3 Object对象中的toString, equals, hashCode方法都使用public修饰,而clone方法却被protected修饰,请尝试解释原因。为什么不声明为public呢?

答: 通过查阅资料,我的理解是,假如把clone方法定义为public,失去了安全机制;有时候,我们并不希望谁都可以对对象进行clone。作为浅拷贝,这会造成数据的混乱,也有可能更改原来的数据。
若把clone方法设置为protected,我们被要求如果不在同包下操作,则必须要重写为public,去实现深拷贝——将所有数据都进行拷贝而非改动元数据

2. 内部类

2.1 使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目7-2。请贴图关键代码与运行结果,请在运行结果中出现你的学号与姓名。

1122312-20171027154111445-1110093543.png

1122312-20171027154059351-1293702162.png

2.2. 分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?

Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代码 } };

答: 此处,使用匿名内部类的形式,为shapeComparator创建了一个对象。且这个匿名内部类完成了Comparator接口,重写了compare方法。这使得此对象可以作为完成Comparator接口的对象使用。

2.3 题集:6-1(匿名内部类)实验总结。你觉得使用匿名内部类有什么好处?

实验总结: 此实验虽然用到了ActionListener类,但实际上只是借用接口来传递简单的循环事件,只需要在接口要求的方法public void actionPerformed(ActionEvent e)中完成循环就可以了。
好处: 匿名内部类的一个好处在于极大的简化了工作量。对于那些只需要临时使用一次的对象,我们可以不去写一个完整的类,而是直接对其进行匿名内部类初始化。这使得编程变得极为灵活;
另一个好处在于,我们可以使用匿名内部类调用那些声明为protected的方法。通过匿名内部类,我们将其重写一个public方法并调用父类方法。

3. PTA实验总结

3.1 PTA(自定义接口)。并回答:相比较不写接口,直接写一个类包含IntegerStack相应的方法来说,定义IntegerStack接口,然后定义其实现类这种方式有什么好处?

  • 实现栈的方式与C语言并没有什么不同。只不过要注意题中在没有数字是输出的是null而不是0。这说明需要用Integer类型而非int。
  • 定义接口的好处在于可以随时将接口的实现方法换掉,也就是降低了程序主题mian方法与栈实现方法的耦合性。我们可以用其他方法,例如arraylist实现栈。

3.2 PTA(静态内部类)。并回答:你觉得什么时候应该使用静态内部类?静态内部类与内部类有什么区别?

  • 实验的重点在于完成静态内部类以及静态方法上。注意静态方法只能调用静态内部类。
  • 静态内部类应该适用于要描述的是相对独立的、受外部影响小的类的时候。
  • 静态内部类与内部类的区别最主要的地方在于对于外部成员的访问;静态内部类只能访问外部静态方法与属性,而内部类则没有这种限制。同样,静态内部类对于外部成员的依赖性也较小。

3.3 PTA(继承覆盖综合练习-Person、Student、Employee、Company)。并回答:使用Collections.sort对引用类型数组进行排序需要有一个什么前提条件?

  • 使用Collections.sort需要完成comparatorcomparable接口
  • 此程序比较复杂的地方在于繁杂的继承与覆盖。在程序完成以后,虽然输出与题目样例相同,但OJ显示第一个测试点错误。此问题并没有解决。
    1122312-20171028135032461-190071181.png

4.大作业-继续完善(尝试使用接口改造你们的系统)

4.1 现在希望将系统中购物车的操作抽象到相应的DAO接口。

1122312-20171028144415726-1248363896.png

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

我通过列表实现的该接口
1122312-20171028145119930-1495552318.png
1122312-20171028145134039-1323549099.png
1122312-20171028145200726-1103218937.png
数组形式、王祖建负责:
1122312-20171028190413601-1131638727.png

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

ps.此处Main程序,仅作用于测试,非完整主文件。
1122312-20171028152810023-1687826218.png
1122312-20171028153140867-1020483673.png

DAO接口的好处在于可以对相同方法运行不同实现方式,而无需改变其他程序。这样的做法大大降低了类之间的耦合性。极大地便利了编程工作。

5. 代码阅读:PersonTest.java(abstract、多态、super)

5.1 画出类的继承关系

1122312-20171028154705820-711337508.png

5.2 main函数的代码实现什么功能?

创建四个对象,类分别为EmployeeStudentProgrammerManager并将其存于Person数组中,将其按照年龄大小排序,最后输出。

5.3 如果将子类中的super构造函数去掉行不行?

不可以。
在查阅资料后,我了解到:子类不能访问父类的私有成员;然而子类还是继承了父类的属性与方法。
子类可以通过反射的方法来访问父类私有属性,当然这并非现阶段的学习任务。
现阶段,我们需要用super调用构造函数来构造属性。

5.4 PersonTest.java中哪里体现了多态?

EmployeeStudentProgrammerManagerPerson类覆盖了toString方法体现了多态


3.码云及PTA

3.1. 码云代码提交记录

1122312-20171028160506086-838743131.png

3.2 截图PTA题集完成情况图

1122312-20171028160557351-498819351.png
1122312-20171028160618898-891695187.png

3.3 统计本周完成的代码量

周次总代码量新增代码量总文件数新增文件数
10000
20000
36196191515
46190150
59733542510
613944213712
72001607436

转载于:https://www.cnblogs.com/piraat/p/7739643.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值