• 1.本周学习总结

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

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

这周上课主要学了继承,在打代码的时候对各个关键字(除了super关键字)的用法有一点混乱。对多态和继承的区别也有点混淆,努力百度中。有时候上课感觉听多了但一到打代码就啥都不会了,可能是因为没巩固好。
  • 2. 书面作业

① 注释的应用

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


② 面向对象设计(大作业1,非常重要)

  • 2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)

A:

用户打开网页登录系统,浏览网页所列出的商品,经过挑选点击选择满意商品的数量与种类加入购物车。在购物车查看自己已选商品,确认数量与种类后点击结算,付账后系统将生成订单。
  • 2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。


③ ManagerTest.zip代码分析

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

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

A:

public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
} public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
} 用到了getSalary方法,n、s、year、month、day这几个属性。
  • 3.2 Employee类及其子类Manager都有getSalary方法,那怎么区分这两个方法呢?

A:

   父类:
public double getSalary()
{
return salary;
}
子类:
public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
} 由程序可见,父类与子类方法不同的区别是子类会用super关键字来表示,故以此来区分父类与子类。
  • 3.3 文件第26行e.getSalary(),到底是调用Manager类的getSalary方法还是Employee类的getSalary方法。

A:

由以上截图可以看出,此行的e.getSalary()是调用Employee类的方法`。
  • 3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

A:

自己觉得实现代码复用可以省点事,但查了一下百度,得知了:重新使用已有代码可以降低成本、增加代码的可靠性并提高它们的一致。既然如此,有了更高效的方法可以实现低成本,那如果再复制粘贴浪费空间,是没有必要的。

④ Object类

  • 4.1 编写一个Fruit类及属性String name,如没有extends自任何类。使用System.out.println(new Fruit());是调用Fruit的什么方法呢?该方法的代码是从哪来的?尝试分析这些代码实现了什么功能?

A:

package ex2;
class Fruit{ //定义类为Fruit
private String name; //定义这个类的私有属性name(名字)
}
public class test201{
public static void main(String[] args){ //main函数,程序运行的入口。
System.out.println(new Fruit());
}
}
由于没有extends自任何类,故默认继承了Object为父类,并调用了Fruit的toString()方法。

显示如下:

  • 4.2 如果为Fruit类添加了toString()方法,那么使用System.out.println(new Fruit());调用了新增的toString方法。那么其父类中的toString方法的代码就没有了吗?如果同时想要复用其父类的toString方法,要怎么操作?(使用代码演示)

A:

package ex2;
class Fruit{ //定义类为Fruit
private String name; //定义这个类的私有属性name(名字) @Override
public String toString() { //调用toString()方法
return "I'M A Mango";
} }
public class test201{
public static void main(String[] args){ //main函数,程序运行的入口。
System.out.println(new Fruit());
}
} 调用了新增的toString方法后,其父类中的toString方法的代码不会没有。
若同时想用复用父类的方法,只要结合super关键字来复用即可。如return ""I'M A Mango" + super.toString();

显示结果如下:

  • 4.3 Fruit类还继承了Object类的eqauls方法。尝试分析其功能?自己编写一个equals方法覆盖父类的相应方法,功能为当两个Fruit对象name相同时(忽略大小写),那么返回true。(使用代码证明你自己覆盖的eqauls方法是正确的)

A:

public boolean equals(Object obj) {
return (this == obj);
}
功能如下:

package ex2;
class Fruit{ //定义类为Fruit
private String name; //定义这个类的私有属性name(名字) public Fruit(String name){
this.name = name;
}
@Override
public String toString() {
return "I'M A Mango";
}
public boolean equals(Object obj) {
if(this == obj)
return true;
if(obj == this)
return false; return true;
}
} public class test201{
public static void main(String[] args){ //main函数,程序运行的入口。
Fruit a = new Fruit("I'M A Mango");
Fruit b = new Fruit("I'M A mango"); System.out.println(a.equals(a));
System.out.println(a.equals(b));
} }
运行结果如下:

  • 4.4 在4.3的基础上使用ArrayList fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

A:

可以将其主函数改为如上图:

可以看一下ArrayList的contatins方法的源代码为:
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;
}
public boolean equals(Object obj) {
return (this == obj);
} 可以发现在contains方法会调用o.equals(elementData[i])方法来比较两个对象的引用是否相同。故功能是以此来实现的。

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

  • 5.1 画出类的继承关系

A:

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

A:

会显示为:
Manager [bonus=12000.3, toString()=Employee [salary=90000.1, toString()=Person [name=Clark, adress=GE, phonenumber=111, email=111@mail.com, age=10, gender=mail]]]
Student [status=1, toString()=Person [name=wang, adress=110, phonenumber=15959, email=15959@163.com, age=18, gender=male]]
Employee [salary=1000.0, toString()=Person [name=zhang, adress=136, phonenumber=1360, email=1360@mail.com, age=21, gender=female]]
Programmer [allowance=50000.0, toString()=Employee [salary=100000.0, toString()=Person [name=Gates, adress=usa, phonenumber=911, email=911@com, age=59, gender=male]]] 可以看出:继承了Person类的Student类和Employee类比继承了Employee类的Manager类和Programmer类少了一层嵌套。因为Employee类在被继承前也继承了Person类,故出现此结果。
  • 5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?

A:

作用是引用当前对象的直接父类中的成员。不知道答案,故查询了一下之后总结出:其实可以不用显式的写出super,但前提是“超类中有多个构造方法,且有一个是显式写出的无参的构造方法”。但此代码中没有类符合条件,故不可以。
  • 5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?

A:

for (Person person : peoples) {
System.out.println(person);
}
在代码里这里体现了多态。 百度到了比较具体完整的答案:多态对已存在的代码具有可替换性、可扩充性、接口性、灵活性、简化性,可以增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。也在应用中体现了灵活多样的操作,提高了使用效率。并且简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时可以看出其优点。
我认为,多态最大的好处对于现在我们来说应该是其灵活性比较强,并且比较简便,在编写多态方法时,所有重载的方法所执行的目的是相同的,但其参数也许不同。所以可以屏蔽不同子类对象之间的差异,写出通用的代码以适应需求的不断变化。

  • 3. 码云代码提交记录

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


  • 4. PTA实验

题目集:jmu-Java-03-面向对象1-基础-封装继承 中的

函数(4-1, 4-2, 4-3,4-4较难选做)

编程(5-4, 5-5, 5-6)

一定要有实验总结

5-4

发现对于子类的一些定义不是很清楚,一边搜索一边打代码,有时对于类与类的调用会由混淆。

5-5

这道会比5-4简单一些,按照题目要求写即可。

5-6

一看题目就比较复杂,还在写。。对ArrayList之类的实在不熟悉。

最新文章

  1. [No00006A]Js的addEventListener()及attachEvent()区别分析【js中的事件监听】
  2. 总结javascript中的全局变量和局部变量的区别以及声明函数和调用函数的区别
  3. JavaScript高级程序设计学习笔记--变量、作用域和内存问题
  4. 4KB对齐
  5. 十个优秀的C语言学习资源推荐
  6. Android之聊天室设计与开发
  7. JSP实现数据库(MySQL)查询——Java Web练习(二)
  8. spring的常用配置
  9. selenium定位tr及td,并获取其文本及属性
  10. httpclient的get带参不带参post带参不带参的简单应用
  11. [LeetCode] Falling Squares 下落的方块
  12. 算法工程师:双非渣硕是如何获得百度、京东双SP
  13. tomcat在windows及linux环境下安装
  14. Spring 源码分析-1-启动
  15. C# 添加动态属性
  16. [转]在Windows上安装RabbitMQ
  17. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
  18. console.log() 替代函数
  19. Spring @SCHEDULED(CRON = &quot;0 0 * * * ?&quot;)实现定时任务
  20. xsocket:空闲超时问题。

热门文章

  1. 社交系统/社群系统“ThinkSNS+”H5及PC端终于来了!一起来“找茬”
  2. Qt日常备注(函数/接口实现)
  3. mysql为什么范围查询(&gt;,&lt;,between,%like,like%)之后的索引无效
  4. easyui问题小结(转)
  5. 如何改变Myeclipse编辑区背景色(转)
  6. 8.20.1 图形化:弹窗JOptionPane
  7. php之数组
  8. tensorflow安装调试总结(持续更新)
  9. 7-zip 解压
  10. Maven 中央仓库及阿里云仓库地址