201521123051 《Java程序设计》第4周学习总结

时间:2023-03-09 15:19:37
201521123051 《Java程序设计》第4周学习总结

1. 本周学习总结

1.1 尝试使用思维导图总结有关继承的知识点。

201521123051 《Java程序设计》第4周学习总结

使用工具:百度脑图

1.2 使用常规方法总结其他上课内容。(多态)

多态的定义:父类的引用指向子类的对象。
父类的引用:一是指父类变量指向的那个内存空间
二也是指父类*的类型信息表,这个表示任何对象都具备的,和继承多态无关。
子类的对象:
一是指子类的那个堆内存空间。
二也是指子类的那个类型信息表。

2. 书面作业

1.注释的应用

使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)

类注释

201521123051 《Java程序设计》第4周学习总结

方法注释

201521123051 《Java程序设计》第4周学习总结

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等等)

201521123051 《Java程序设计》第4周学习总结

2.3 尝试使用Java代码实现故事中描述的这一过程(不必很完善),将来要在这个基础上逐渐完善、扩展成一个完整的面向对象的系统。(可选:加分)

3。ManagerTest.zip代码分析

分析ManagerTest.zip中的代码,回答几个问题:

3.1 在本例中哪里体现了使用继承实现代码复用?回答时要具体到哪个方法、哪个属性。

201521123051 《Java程序设计》第4周学习总结

201521123051 《Java程序设计》第4周学习总结

**3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

Employee类中的getSalary()方法自然是父类的(也许父类可以调用子类方法,但应该有关键字之类的)。Manager类中的getSalary()方法自然是子类的,super.getSalary()【关键字super】自然表示调用父类的getSalary()方法。

201521123051 《Java程序设计》第4周学习总结

3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

201521123051 《Java程序设计》第4周学习总结

是调用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 fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

5.代码阅读:PersonTest.java(abstract、多态)

5.1 画出类的继承关系

201521123051 《Java程序设计》第4周学习总结

5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因

运行结果

201521123051 《Java程序设计》第4周学习总结

5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

使用super关键字调用父类。

不能将子类中的super构造函数去掉

5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

多态的体现

201521123051 《Java程序设计》第4周学习总结

多态的好处

可以增强程序的可扩展性及可维护性,使代码更加简洁。
不但能减少编码的工作量,也能大大提高程序的可维护性及可扩展性。

多态与继承关系

多态是:一个对象可以被多个其他对象动态调用
继承是:一个子类可以继承父类的属性,和方法
没有封装就谈不上继承,而没有继承,就不可能有所谓的多态。
而理解封装、继承和多态(特别是多态)是理解设计模式的基础。

3. 码云代码提交记录

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

201521123051 《Java程序设计》第4周学习总结

4. PTA实验

实验总结

通过这次编程和上机实验学到了挺多内容的,对于继承和多态的体会更加深刻了。原来都只是理论上的学习,操作的时候还真无从下手。实验做完,还是有很多不懂得地方,希望能够尽快把问题解决好。\
掌握了方法的覆盖、重载,掌握抽象类和接口的使用。对于Java语言有了更深一层的认识,多态与继承、方法重写密切相关,我们在方法中接收父类类型作为参数,在方法实现中调用父类类型的各种方法。当把子类作为参数传递给这个方法时,java虚拟机会根据实际创建的对象类型,调用子类中相应的方法。