1. 本周学习总结

    ==========

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

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

答: - 只能有一个父类,即单继承,子类继承父类的全部成员(属性和方法),并可能有自己特有的属性和方法。

- 覆盖是指在子类中重新定义父类中的方法。

- 多态性是指相同的形态不同的行为即方法名相同,但是实现的过程不同。

- instanceof 可以判断父类引用所引用的对象实例的实际类型。

- final修饰变量,表示变量的值在初始化之后就不能再改变;相当于定义了一个常量。

参考资料:

百度脑图

XMind

  1. 书面作业

    ==========

1、注释的应用

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

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

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

在老师布置完作业的时候,sd卡十分配合的损坏了,于是我逛起了淘宝。

首先登录

我选择的是手机扫码登录

然后搜索“sd卡”

发现了一个不错的sd卡,进去看看

看了看介绍,表示很心动,就给放进购物车里面

最后。。结算。。。。。

2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。

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

参考资料:

UML类图

面向对象案例-借款者姓名地址.zip

3、ManagerTest.zip代码分析

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

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

class Manager extends Employee  //使用了extend关键字
{
public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day); //super关键字,调用了父类里Employee(String n, double s, int year, int month, int day)方法
bonus = 0;
} public double getSalary()
{
double baseSalary = super.getSalary();//super关键字,调用了父类里getSalary()方法
return baseSalary + bonus;
}

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

答:在使用getSalary时,若是父类的,前面要加上super,即super.getSalary(),以此来区分两个方法。

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

答:这与e的类型有关,在代码中可以看到boss是Mannager类的,而staff[0]=boss,所以在输出staff[0]的数据时,调用的是Manager类的getSalary方法;staff[1]和staff[2]为Employee类的,所以输出时调用的是Employee类的getSalary方法。

3.4 Manager类的构造函数使用super调用父类的构造函数实现了代码复用,你觉得这样的有什么好处?为什么不把父类构造函数中的相关代码复制粘贴到Manager的构造函数中,这样看起来不是更直观吗?

答:代码复用最直接的好处就是减少了代码数量,使代码更加精简,减少了编码的时间,重新使用已有的代码可以降低成本、增加代码的可靠性并提高它们的一致性。复制黏贴虽然看起来更直观,但是会浪费计算机资源,同时程序会变长,不美观。

4、Object类

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

代码如下:

package Main;

import java.util.*;
class Fruit {
private String name;
} public class Main {
public static void main(String[] args) {
System.out.println(new Fruit());
}
}

结果Main.Fruit@15db9742

这是调用了Fruit的toString方法,该方法是object类里面的,作用是返回一个表示引用对象自己正常信息的字符串,而这个字符串的内容由我们自己去定义,默认的字符串内容是“类名+哈希编码”。

附上照片

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

答:添加了toString()方法

父类中的方法还在,如果要复用需要加上super关键字。

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

public boolean equals(Object obj) {
return (this == obj);
}

具体作用就是相等返回true,不相等返回false。

主要代码

结果

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

`

答:ArrayList的contatins方法的实现是通过使用Fruit类里面的equals方法,来实现其功能的。

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

5.1 画出类的继承关系

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

答:将对象按年龄从小到大排序,然后输出。

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

答:子类中使用super构造函数作用是调用父类的构造函数,不能将子类中的super构造函数去掉,这样的话子类就不能调用父类的构造函数。

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

体现:

Person[] peoples = new Person[4];
peoples[0] = new Employee("zhang", "136", "1360", "1360@mail.com", 21, "female", 1000.0);
peoples[1] = new Student("wang", "110", "15959", "15959@163.com", 18, "male", "1");
peoples[2] = new Programmer("Gates", "usa", "911", "911@com", 59, "male", 100000.0, 50000.0);
peoples[3] = new Manager("Clark", "GE", "111", "111@mail.com", 10, "mail", 90000.1, 12000.3);

多态能使同一方法在不同类中有不同的体现,这能是代码量降低,同时能使代码更加灵活。

参考文件:PersonTest.java

  1. 码云代码提交记录

    ==========

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

4. PTA实验

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

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

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

实验总结:

5-4:这一题使用到了抽象类shape,主要是加上关键词abstract,这样能更好的应付不同的图形求面积边长等问题。

5-5:这一题需要用到ArrayList的contains方法,需要了解该方法的使用。

最新文章

  1. EF With SQLite
  2. ACM: HDU 5285 wyh2000 and pupil-二分图判定
  3. linux 用户打开进程数和文件数调整
  4. 基于dojo模板的widget
  5. Nginx windows下搭建过程
  6. python学习第一课要点记录
  7. Android开发环境搭建简介
  8. 17 个 Linux 下用于 C/C++ 的最好的 IDE
  9. Maven之(一)Maven是什么
  10. jdbc链接数据库
  11. 关于简单的安卓APP状态栏设置(类似沉浸式状态栏)
  12. Spring 注入集合
  13. pyparsing自定义解析规则
  14. mybatis入门--配置
  15. 查看进程在CPU和内存占用的命令
  16. 安装phpredis扩展
  17. adb查看安卓设备系统Android版本
  18. js中的逻辑与和逻辑或随笔
  19. java线程(3)——详解Callable、Future和FutureTask
  20. iOS 学习笔记一【屏幕截图,并显示当前View】

热门文章

  1. html2canvas页面截图图片不显示
  2. table之thead兼容
  3. shell编程之数组
  4. 关于Uncaught SyntaxError: Unexpected token o in JSON at position 1,chrome持续报错的相关解析
  5. linux下利用mentohust校园拨号上网小记
  6. Relationship between frequency domain and spatial domain in digital images
  7. Guava Cache源码解析
  8. java子类和父类中静态块、非静态块、构造函数的执行顺序
  9. jenkins 从git拉取代码
  10. Unresolved reference issue in PyCharm