201521123026 《Java程序设计》第4周学习总结
1. 本章学习总结
尝试使用思维导图总结有关继承的知识点
使用常规方法总结其他上课内容
1.类的重写:在子类中重写的方法需要和父类被重写的方法具有相同的方法名、参数列表以及返回值类型。当子类重写父类的方法后,子类对象将无法访问父类被重写的方法。
2.文档注释:文档注释是嵌入到程序中的帮助信息,用于说明如何使用当前程序。以/**开头,以*/标志结束。javac中提供javac命令,可以用帮助信息生成HTML格式的帮助文档。
3.final关键字:1)修饰类。该类将不能被继承也就是不能派生子类。2)修饰方法。这个类的子类将不能重写该方法。3)修饰变量。final修饰的变量一旦被赋值,其值不能被改变。
4.多态性:相同的形态,不同的行为(不同的定义)。在同一个方法中,由于参数类型不同而导致执行效果各异的现象就是多态。
5.动态绑定:运行时能够自动地选择调用哪个方法。
2. 书面作业
Q1. 1.注释的应用。使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。
答:
注:使用eclipse生成html格式注释文档javadoc
选中项目->export->Java->javadoc->next->configure->选中jdk安装目录(不知道在哪可以通过everything输入javac.exe查找)->bin->javadoc.exe->next->Document Title任意取名->next->vm options中设置编码->finish
Q2.面向对象设计
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
答:假如我要买一本java的辅导书,首先我得打开手机购物APP登陆账号,在总的商城中搜索java书关键字进行查找,这时候会出现各种不同类型的有关java的辅导书(如java编程思想,javascript或者是java基础习题集等)此时可以根据自己的需要,进一步完善关键字,缩小搜索范围,查询自己想要的书(如java编程思想)。通过排序(按照价格高低排序显示或者按照销量高低排序)在这些同样的书中进行筛选,最终找到一个自己想要物美价廉的书。然后将该本书加入购物车,输入收货人,地址,联系电话等信息确认订单,在线付款后提交订单。
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
答:
Q3. ManagerTest.zip代码分析
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
答:
public Employee(String n, double s, int year, int month, int day){
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
};//Employee类(父类)
public Manager(String n, double s, int year, int month, int day){
super(n, s, year, month, day);//super关键字
bonus = 0;
}//Manager类(子类)
public Manager(String n, double s, int year, int month, int day){
super(n, s, year, month, day);
bonus = 0;
}//复用父类Employee类的属性以及方法
public double getSalary(){
double baseSalary = super.getSalary();
return baseSalary + bonus;
}// 复用父类Employee类的getSalary()方法
3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
答:根据super关键字来区分父类与子类的同名方法。
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
答:动态绑定,编译器无法得知到底是什么类的对象在调用这个方法,同理,调用Manager类的getSalary方法还是Employee类的getSalary方法是根据e的类型来定。(通过程序运行结果同样可以得出该结论)
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
答:使用super调用父类的构造函数实现代码复用,能够减少代码的数量,避免代码冗余。(DRY原则:DO not repeat yourself。意思是在进行编程的时候相同的代码不要重复写,最好只写一次,然后可以在其他地方直接引用。如此一来,可以提高代码的利用率,缩减代码量,同时也有助于提高代码的可读性和可维护性。)
Q4.Object类
4.1 编写一个Fruit类及属性String name,如没有extends自任何类,使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
答:
class Fruit {
private String name;
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
使用System.out.println(new Fruit());是调用Fruit的toString()的方法。虽然在Fruit中并没有定义这个方法,但程序并不会报错,且能输出运行结果Fruit@15db9742。这是因为Fruit类默认继承自Object类,在Object类中定义了toString()方法,在方法中输出了对象的基本信息。Object类的toString()方法中的代码具体如下:
getClass().getName() + '@' + Integer.toHexString(hashCode())
//getClass().getName()代表返回对象所属的类名即Fruit
//hashCode()代表返回对象的哈希值
//Integer.toHexString(hashCode())代表将对象的哈希值用16进制表示
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
答:父类中的toString代码不会没有呀,同时想要复用其父类的toString方法可以使用super()关键字调用父类中的toString。
代码演示如下
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
答:equal方法的功能:比较两个对象是否相等(不是比较对象的属性是否相同)。仅当被比较的两个引用变量指向同一个对象(即指向同一个地址),返回true,否则返回false。
代码演示如下
4.4 在4.3的基础上使用ArrayList
答:
contains代码如下
public boolean contains(Object o){
return indexOf(o) >= 0;}
public int indexOf(Object o) {
if (o == null) {
for (int i = 0; i < size; i++)
if (elementData[i]==null)
{ return i; }
else {
for (int i = 0; i < size; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
即ArrayList的contatins方法会通过用ArrayList中的每一个对象的equals方法与新添加的对象相比较判断从而实现其功能。
Q5.代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
答:
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因。
答:Person类是一个抽象类,无法实例化对象,因此只需分析Student类,Employee类,Manager类和Programmer类(其中student类和employee类继承person类,manager类和programmer类继承employee类)而这四个类都是各自输出自己特有的成员变量,然后利用super关键字调用父类的toString()方法,得出运行结果。
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
答:作用:调用父类的构造方法。此时不能将子类中的super构造函数去掉,理由是因为在子类的构造方法中一定会调用父类的某个构造方法。如果去掉super,在实例化子类对象时会自动调用父类的无参数的构造函数。而该例中父类中没有无参数的构造函数,此时会出现错误。
5.4 1)PersonTest.java中的代码哪里体现了多态?2)你觉得多态有什么好处?3)多态和继承有什么关系吗?
答:
(1)
for (Person person : peoples) {
System.out.println(person);
}//体现多态
(2)
在我看来现在“多态”有两点好处给我留下了深刻的体会:1)在编写程序的时候,不需要为每一个新构建的类编写功能调用,在一定的情况下,只需要对现有的类进行处理即可。这点大大提高了代码的可复用性。(2)同样的,使用父亲类型的变量也可以引用子类对象,并根据被引用的子类对象的特性,得到不同的运行结果,这使得代码的编写变得灵活,可以提高可扩充性和可维护性。
当然多态的好处不止这2点,这里给予补充:
- 可替换性。多态对已存在的代码具有可替换性。
- 可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际 上新加子类更容易获得多态功能。
- 接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
- 灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
- 简化性。多态简化了对应用软件的代码编写和修改过程。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定
(3)多态和继承的关系:首先是继承指的是在现有的一个类的基础上去构建一个新的类,构建出来的新的类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在有了父类和子类的关系的基础上,子类可以调用甚至是重写父类的方法,而当调用父类的方法名和子类中的方法名相同时要根据对象类型来判断选择哪个方法,此时产生不同的运行结果即多态。
3.本周码云代码Commit历史截图
在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示
4. PTA实验总结记录
实验四:
1.抽象类以及抽象方法的定义(如abstract class shape以及public abstract double getPerimeter()和public abstract double getArea()))。
2.定义抽象类的时候,包含抽象方法的类必须声明为抽象类,但抽象类可以不包含任何抽象方法,只需要使用abstract关键字修饰就行。
3.通过继承实现代码复用。(注意比较5.3和5.4)
实验五
1.循环和equals关键字相结合(或者ArrayList的contains方法的使用)。
2.Arraylist的使用。
实验六:(待改)
1.Collections.sort的使用
201521123026 《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 字符串 string
字符串 string 语法: a = 'hello world!' b = "hello world!" 常用操作: 1.乘法操作是将字符串重复输出2遍 >>> ...
- 记一次小型生产事故 | BeyondComper跨编码方式复制文件内容
前言 今天组长在做站内巡检的时候,发现header内有一条meta标签的content显示为乱码. <meta name="description" content=&quo ...
- hadoop生态圈列式存储系统--kudu
介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity hardware(商品硬件)上 ...
- python基础===filter在python3中的用法
l = range(0,20) def f(x): if x%2 == 0: return True print(list(filter(f,l))) #和python2的区别在于,要加一个list
- python时间序列分析
题记:毕业一年多天天coding,好久没写paper了.在这动荡的日子里,也希望写点东西让自己静一静.恰好前段时间用python做了一点时间序列方面的东西,有一丁点心得体会想和大家 ...
- python学习之数字
数字python中的数字比较典型,典型在可以表示很小的数,也可以表示很大的数,c语言的数字类型如果表示很大的数的话,可能会报溢出错误,但是python不会,python 数字类型的完整工具包括整数和浮 ...
- Java中常见数据结构List之ArrayList
这里主要包含ArrayList和LinkedList, 然后再添加一个:CopyOnWriteArrayList 关于Java中的集合内容, 感觉都已经被写烂了, 我这里主要是做个复习, 再从扒下源代 ...
- Oracle 11g完全卸载方案(注册表清理)
1.如果数据库配置了自动存储管理(ASM),应该先删除聚集同步服务CSS(Cluster Synchronization Services). 删除CSS服务的方法是在DOS命令行中执行如下命令: ...
- Web存储—简易注册登录
Web Storage是HTML5引入的一个非常重要的功能,可以在客户端本地存储数据,类似HTML4的cookie,但可实现功能要比cookie强大的多,cookie大小被限制在4KB,cookie只 ...
- Fiddler过滤会话
Fiddler每次打开的时候都会打开十多个会话,期望只想抓取自己想要的请求. 1)User Filters:启用过滤器 2)在Filers面板中勾选"Use Filters", ...