201521123034《Java程序设计》第4周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。

1.2 使用常规方法总结其他上课内容。
1.对类的设计:
- 将属性设计为私有
- 对属性初始化
- 类名和方法名要能体现他们的职责
2.识别类:
- 在一段故事中寻找到名词——创建相应的类
- 在一段故事中寻找到动词——建立方法
3.文档注释:
- 注释以/*开始,以*/结束
4.继承:(extends)
- 被继承的类称为父类
- 继承父类的类称为子类
- 继承时子类将获得父类的属性与方法,并具有自身特有的属性与方法。
5.多态:
- 相同的形态,不同的行为(不同的定义)
- 相同的方法名,不同的实现(父类类型变量可以引用子类对象)
- 通过 instanceof 可以判断父类引用所引用的对象实例的实际类型
6.抽象类:
- 用abstract关键字来修饰一个类时,该类叫做抽象类;
- 抽象类必须被继承。
- 抽象类不能被直接实例化。
参考资料:
百度脑图
XMind
2. 书面作业
1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
| 对方法的注释 |


| 对类的注释 |


面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
答:网上商城购物:购物者在首先在首页浏览信息查询想要买的商品,查看商品的信息,包括商品价钱库存,还能浏览之前购买过该商品的买家的评论,接着登录会员(非会员要注册),登录成功后返回商品页面添加商品,添加后商品将会出现在购物车中,买家能在购物车中添加或删减想要买的数量,填写收货地址,最后提交订单,确认后付钱。
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
答:买家使用这个系统。(1)类:商品 属性:商品价钱、规格大小、库存量。(2)类:订单 属性:商品数量 方法:增添删除数量 (3)类:送货地址 属性:地址 方法:增加删除修改地址 (4)账户:用户名、密码 方法:注册账号、更改账号信息。

| 经老师提醒后修改了类图。在设计类时使用继承要谨慎,谨记is-a 这个关系 |
2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
参考资料:
UML类图
面向对象案例-借款者姓名地址.zip
ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

| employee 为父类 |

| manager 为子类 |

3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
答:根据调用该方法的实际对象的类型来决定选择调用哪个方法。
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

| (已修改) |
```
答:从代码运行结果可以看到,staff[0}调用的是Manager的getsalary方法,staff[1]和staff[2]调用的是employee的getsalary方法。这是由于程序运行中根据对象声明类型来调用相应的方法(动态绑定)。
```
**3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?**
答:~~使用super调用父类的构造函数实现代码复用,减少代码的数量,避免代码冗余~~
| 修改: |
```
百度查询了一下DRY原则,即Don't repeat yourself,用自己的话来说就是程序中不要重复使用代码,这样做能达到提高工作效率,节省维护成本的目的。
```
**Object类**
**4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?**

```
答:调用Fruit的toString()的方法;该代码是来自默认继承的父类Object;public String toString()返回该对象的字符串表示。
```
**4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)**

(1)调用新增的toString方法。

(2)若要同时复用其父类,只要加上super.+父类方法,就能使用父类的方法。
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)

答:(1)从object的源代码中可以看到其eqauls方法,功能是用来比较两个对象是否相等,相等则返回true,否则返回faulse。
答:(2)编写一个equals方法覆盖父类(代码截图如下)


4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

arraylist中contains的源代码

答:从源代码中可以看出,在contains()方法传入的参数是null,则直接在list找有没有null元素,如果传入的参数不是null,则contains函数用调用equals方法,把传入的参数与list中每个元素做比较。
代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
答:自己推测:对一组person对象根据age由大到小排序,并且分别以emlopyee、student、programmer、mannager类的toString的形式输出
运行结果(下图)

分析:因为person为抽象类不能创建新对象不能实例化,所以数组中每个对象应该以他们所定义的类中的tostring的形式输出。
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
答:(1)作用是调用父类的方法。(2)不行。原因是去掉super,JAVA会默认调用父类的无参数的构造函数,而父类中没有无参数的构造函数,因此会报错。
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
for (Person person : peoples) {
System.out.println(person);
}
答:(1)以上代码中体现了多态,每个对象输出的格式分别为其被定义的类中的toString。(2)多态的好处: 避免重复代码多,根据不同类型对象调用相同方法名输出不同结果。(3)多态和继承的关系:首先是因为有了继承才有父类和子类的关系,其次有了父类和子类的关系,子类才能调用父类的方法,而当调用父类的方法名和子类中的方法名相同时要根据对象类型来判断选择哪个方法,此时产生多态。
3. 码云代码提交记录

4. PTA实验
4-1 比较简单,巩固了如何编写toString方法。
4-2 一直编译错误不知道错在哪还在研究
5-4 首先是学习到如何获取对象的类型和父类类型,用hape.getClass()(获得类型),shape.getClass().getSuperclass()(获得父类型);其次学会使用抽象类并继承抽象类的用法。
5-5 这题主要是考察对equals的编写和用法,在写这题的时候用到了多个for循环但觉得代码好像有点冗余,要再考虑一下是否能使代码更简洁一些。
5-6 这题是对继承覆盖的综合练习,写的代码还有些错误,还在努力修改中。
另外可能自己理解能力比较差。。。在一些题目上需要花一些时间才能把题目读懂,有时候不太明白题目意思
201521123034《Java程序设计》第4周学习总结的更多相关文章
- 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 ...
随机推荐
- python学习===判断两个日期的间距天数
import datetime d1 = datetime.date(2015,10,7) d2 = datetime.date(2015,8,15) print((d1-d2).days)
- Mac 如何优雅的使用Microsoft office
近期要使用文档编辑,但是发现mac下的pages实在不好用,或者说是不习惯,想安装个office 发现官方的office 都基本上要收费,网上的多数都要激活.实在没办法(没钱),看看WPS ,结果w ...
- 一步一步学J2SE-HashMap的实现原理
HashMap数据结构图 HashMap的数据结构是通过数组加链表实现的.数组是HashMap的主体,链表是为了解决Hash碰撞问题. HashMap的Get方法 1. 在get的时候首先判断key ...
- MVC项目中使用百度地图
已经很久没更新博客了,因为最近一直在学习前端的知识,没那么多时间,写博客或者写文章不但没有钱,写得好还好说,如果写得不好,一些吃瓜群众,不仅要喷你,搞不好还要人身攻击就不好了.所以写博客的人,脸皮得厚 ...
- SpringMVC基础-controller方法中的参数注解
@PathVariable 映射 URL 绑定的占位符 带占位符的 URL 是 Spring3.0 新增的功能,该功能在 SpringMVC 向 REST 目标挺进发展过程中具有里程碑的意义 通过 ...
- python pip升级失败
接上篇,使用命令:python -m pip install --upgrade pip 发现pip升级时报错,无法升级 解决方法: 1.使用如下命令,查看具体失败原因: pip install -- ...
- docfx (一)
什么是docFX? DocFX 是一个基于.NET的API文档生成器,当前支持 C# 和 VB.它可以通过你的代码中的三斜杠注释生成 API 参考文档.同样也支持你使用 Markdown 文件创建一些 ...
- photoshop软件应用手记
------------------------常用图片格式------------------------ 位图和矢量图 位图也叫点阵图,是由一个个的方形的像素点排列在一起拼接而成的,位图在放大时, ...
- 使用Sidecar将Node.js引入Spring Cloud
网上看到的一篇文章,觉得写得挺好,现转载于此,以方便需要的网友查阅. 该文章介绍了非JAVA语言提供的应用集成到Spring Cloud的这样一个实现,以便我们使用其他语言作为参考. 感谢原作者分享, ...
- JVM中锁优化,偏向锁、自旋锁、锁消除、锁膨胀
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt364 本文将简单介绍HotSpot虚拟机中用到的锁优化技术. 自旋锁 互斥同 ...