201521123034《Java程序设计》第4周学习总结
1. 本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。
1.2 使用常规方法总结其他上课内容。
1.对类的设计:
- 将属性设计为私有
- 对属性初始化
- 类名和方法名要能体现他们的职责
2.识别类:
- 在一段故事中寻找到名词——创建相应的类
- 在一段故事中寻找到动词——建立方法
3.文档注释:
- 注释以/*开始,以*/结束
4.继承:(extends)
- 被继承的类称为父类
- 继承父类的类称为子类
- 继承时子类将获得父类的属性与方法,并具有自身特有的属性与方法。
5.多态:
- 相同的形态,不同的行为(不同的定义)
- 相同的方法名,不同的实现(父类类型变量可以引用子类对象)
- 通过 instanceof 可以判断父类引用所引用的对象实例的实际类型
6.抽象类:
- 用abstract关键字来修饰一个类时,该类叫做抽象类;
- 抽象类必须被继承。
- 抽象类不能被直接实例化。
参考资料:
百度脑图
XMind
2. 书面作业
1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
对方法的注释 |
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155044979-435155722.png)
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155107416-1140318816.png)
对类的注释 |
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155150245-206678825.png)
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170315155157745-1967244637.png)
面向对象设计(大作业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 为父类 |
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170316213341948-18639289.png)
manager 为子类 |
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170316214212385-850964562.png)
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的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?**
![](http://images2015.cnblogs.com/blog/1109692/201703/1109692-20170316225309245-2007903561.png)
```
答:调用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 ...
随机推荐
- Thinkphp5 用ab压力测试工具测试高并发请求
上篇文章[Thinkphp5实现悲观锁]已介绍过thinkphp5使用悲观锁实现高并发的场景,这篇文章将实际测试下. 在shell里进入到apache的bin目录,输入以下url: ab -n 100 ...
- init.ora, pfile, spfile
实例启动时,查找初始化参数文件的顺序为: spfile<sid>.oraspfile.orainit<sid>.ora 如果以上3个文件都不存在,则实例无法启动. init.o ...
- Mac OSX中的@executable_path, @load_path和@rpath的理解(网摘)
Mac OSX中的@executable_path, @load_path和@rpath的理解 原文出处:[24K纯开源] Note: this article is actually about t ...
- IIS 发布之后 您要找的资源已被删除、已更名或暂时不可用。 404.0 解决方法
步骤一: 如图,我发布网站后,在应用程序池中看到默认的.NetFreamork是2.0版本的,我把它改为4.0后 重新浏览网页就正常了. 如果还是不行,那么进行第二步,
- Android上传图片到服务器,服务端利用.NET WCFRest服务读取文件的解决方案
在项目中遇到要将Android设备拍摄的照片上传的服务器,将文件保存在服务器本地的文件夹中,数据库中保存的是图片文件名.整个上传是将图片生成二进制流通过HTTP请求上传到服务端,服务端是基于.NET环 ...
- 设计模式的征途—20.备忘录(Memento)模式
相信每个人都有后悔的时候,但是人生并无后悔药,有些错误一旦发生就无法再挽回,有些事一旦错过就不会再重来,有些话一旦说出口也就不可能再收回,这就是人生.为了不让自己后悔,我们总是需要三思而后行.这里我们 ...
- 做的简单的一个静态web服务器,遇到个bug, 提示osError,这点一不小心就错了,特地记下来,加深记忆,socket须先绑定,再listen,如果是先listen再绑定,系统会自动分配一个端口,而程序绑定不了
代码改正之前,先执行了listen,到了bind就报错:此程序只需将listen和改到bind后面即可 from socket import *from multiprocessing import ...
- shell流程控制--循环语句
#!/bin/bash ### for循环,数字段形式 echo 'for 循环,数字段形式' ..} do echo $i done ### for 循环,双括号形式 echo 'for 循环,双括 ...
- Brackets 1.8 开源+免费的Web前端网页文本编辑工具
Brackets 1.8 开源+免费的Web网页文本编辑工具 -------------->> ---------------------- A modern, open source ...
- JavaScript面向对象(一)——JS OOP基础与JS 中This指向详解
前 言 JRedu 学过程序语言的都知道,我们的程序语言进化是从"面向机器".到"面向过程".再到"面向对象"一步步的发展而来.类似于 ...