1. 本周学习总结
1.1 尝试使用思维导图总结有关继承的知识点。
使用工具:百度脑图
1.2 使用常规方法总结其他上课内容。(多态)
多态的定义:父类的引用指向子类的对象。
父类的引用:一是指父类变量指向的那个内存空间
二也是指父类自由的类型信息表,这个表示任何对象都具备的,和继承多态无关。
子类的对象:
一是指子类的那个堆内存空间。
二也是指子类的那个类型信息表。
2. 书面作业
1.注释的应用
使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
类注释
方法注释
1、单行注释:“//……”(快捷键 ctrl + shift + c)
2、块注释:“/*……*/”(快捷键trl + shfit + /)
3、文档注释:“/**……*/”(不清楚快捷键,,希望赐教)
4、 注释标签语法
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
2.面向对象设计(大作业1,非常重要)
2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
①进入淘宝网站,账号密码登录
②找宝贝、确定宝贝
1、搜索自己想要买的东西。点击自己选中的商品,这时可以询问卖家一些问题,比如价格呀,运费呀,质量呀,售后呀等等问题。
2、点击“加入购物车”,选择颜色,尺寸,数量等商品属性
3、点击“确定”。
③付款
1、进入“我的购物车”,选中商品。
2、点击“结算”,选择“支付宝帐户余额支付”,若支付宝没余额,就选择“网银支付”。 支付宝的付款方式很多的,比如合作网点、邮政、网银、信用卡等等,很方便的。
3、再输入支付密码,点“确定”就ok了!
2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
系统中包含的类:①User类(属性,Username & Password) ②CommodityLibrary类(Commodity) ③search类(Commodity) ④ShoppingCart类(Commodity&Number等等) ⑤payment类(Paymentmethod & Paymentpassword) ⑥Commodity(Size &Color& Number等等)
2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)
3。ManagerTest.zip代码分析
分析ManagerTest.zip中的代码,回答几个问题:
3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。
**3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?
Employee类中的getSalary()方法自然是父类的(也许父类可以调用子类方法,但应该有关键字之类的)。Manager类中的getSalary()方法自然是子类的,super.getSalary()【关键字super】自然表示调用父类的getSalary()方法。
3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。
是调用Manager类的getSalary方法
3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?
好处就是代码行数变少了
把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来更直观,但是代码变得冗长,不如用super调用父类方法。
4.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());
}
}
将输入的Object类的对象的值转换成了字符串,输出。
4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)
父类中的toString方法并不会消失,为Fruit类添加了toString()方法,系统会优先调用其方法。
class Fruit {
private String name;
public String toString() {
return super.toString();
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}
使用super关键字即可复用其父类的toString方法
4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)
4.4 在4.3的基础上使用ArrayList
5.代码阅读:PersonTest.java(abstract、多态)
5.1 画出类的继承关系
5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
运行结果
5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
使用super关键字调用父类。
不能将子类中的super构造函数去掉
5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
多态的体现
多态的好处
可以增强程序的可扩展性及可维护性,使代码更加简洁。
不但能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。
多态与继承关系
多态是:一个对象可以被多个其他对象动态调用
继承是:一个子类可以继承父类的属性,和方法
没有封装就谈不上继承,而没有继承,就不可能有所谓的多态。
而理解封装、继承和多态(特别是多态)是理解设计模式的基础。
3. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
4. PTA实验
实验总结
通过这次编程和上机实验学到了挺多内容的,对于继承和多态的体会更加深刻了。原来都只是理论上的学习,操作的时候还真无从下手。实验做完,还是有很多不懂得地方,希望能够尽快把问题解决好。
掌握了方法的覆盖、重载,掌握抽象类和接口的使用。对于Java语言有了更深一层的认识,多态与继承、方法重写密切相关,我们在方法中接收父类类型作为参数,在方法实现中调用父类类型的各种方法。当把子类作为参数传递给这个方法时,java虚拟机会根据实际创建的对象类型,调用子类中相应的方法。