- 本章学习总结
尝试使用思维导图总结有关继承的知识点
1.2 使用常规方法总结其他上课内容。
为了不必要写重复的代码,可以运用继承,用关键字extends来定义一个类,被继承的类叫做父类,继承的类叫做子类,并且只能有一个父类。父类中的属性和方法子类可以引用,子类也可以建立自己的方法,但是父类不能引用。仔类的继承中,object是所有类的父类。 父类的初始化操作总是早于子类!对于子类重写的方法,JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法。通过 instanceof 可以判断父类引用所引用的对象实例的实际类型。
- 书面作业
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 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
在这段代码中子类Manager继承了父类Employee,用到了public Employee(String n, double s, int year, int month, int day)方法,并且用了name、salary、hireday属性。
3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
通过变量的定义来区分,如果变量是由Employee定义,则运用Employee类,Manager亦如此;
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
调用的是Employee类的getSalary方法。
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看 起来不是更直观吗?
可以避免大量代码的重复,如果后期需要修改,则需要对用到父类方法的地方一一修改,会很麻烦。
Object类
4.1编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?
object是所有类的父类,如果没有extends,则继承了object,调用了object的 toString()的方法,该方法的代码是来自系统默认的java.lang包中,可以传递任何类型的类来使用。
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
父类中的toString方法的代码还在,如果同时想要复用其父类的toString方法,可以用super来调用,也可以在创建对象的时候就定义为父类的,就可以调用父类的toString方法了。
~~~
public string toString(){
return super.toString();
}
~~~
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
equals方法的功能:用于比较两个变量是不是指向同一个对象,相当于 == ;
~~~
public boolean equals(Fruit f1,Fruit f2){
if(f1.name==f2,name)
retun true;
else
return false;
}
~~~
4.4 在4.3的基础上使用ArrayList
}
else{
fruiList.add(f);
}
}
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)多态和继承的关系:首先是继承指的是在现有的一个类的基础上去构建一个新的类,构建出来的新的类被称作子类,现有类被称作父类,子类会自动拥有父类所有可继承的属性和方法。在有了父类和子类的关系的基础上,子类可以调用甚至是重写父类的方法,而当调用父类的方法名和子类中的方法名相同时要根据对象类型来判断选择哪个方法,此时产生不同的运行结果即多态。