201521123118《java程序与设计》第4周作业总结

1.本周学习总结

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

1.2 使用常规方法总结其他上课内容。
为了不必要写重复的代码,可以运用继承,用关键字extends来定义一个类,被继承的类叫做父类,继承的类叫做子类,并且只能有一个父类。父类中的属性和方法子类可以引用,子类也可以建立自己的方法,但是父类不能引用。仔类的继承中,object是所有类的父类。 父类的初始化操作总是早于子类!对于子类重写的方法,JVM根据调用该方法的实际对象的类型来决定选择调用哪个方法。通过 instanceof 可以判断父类引用所引用的对象实例的实际类型。

2.书面作业

  1. 注释的应用使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看。(截图)
import java.util.Scanner;
/**
 * 
 * 这是定义一个人的名字、年龄、id的基本信息
 */
class Person{
	private String name;
	private boolean gender;
	private int age;
	private int id;
	
![](http://images2015.cnblogs.com/blog/1109877/201703/1109877-20170318151219713-504726313.png)
2. 面向对象设计(大作业1,非常重要)
   2.1 将在网上商城购物或者在班级博客进行学习这一过程,描述成一个故事。(不得少于50字,参考QQ群中PPT的范例)
       网上购物,小明需要一本《java程序与设计》的书,打开淘宝,搜索这本书,出现了许多的店家,选择了其中一个,进店查询了一下这本书的基本信息和评价的内容,然后又想                              买一本练习册,于是把这本书添加入购物车,然后以同样的方法选择了自己喜欢的练习册,也加入了购物车,核对好了价钱,确认购买。
   2.2 通过这个故事我们能发现谁在用这个系统,系统中包含的类及其属性方法,类与类之间的关系。尝试找到这些类与属性,并使用思维导图描述类、属性、方法及类与类之间的关系。
       ![](http://images2015.cnblogs.com/blog/1109877/201703/1109877-20170318152851229-1631194624.png)

   
3. 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的构造函数中,这样看  起来不是更直观吗?
       可以避免大量代码的重复,如果后期需要修改,则需要对用到父类方法的地方一一修改,会很麻烦。
4. 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<Fruit> fruitList存储多个fruit,要求如果fruitList中已有的fruit就不再添加,没有的就添加进去。请编写相关测试代码。并分析ArrayList的contatins方法是如何实现其功能的?

public void inset(Fruit &fruiList,Fruit f){
if(fruiList.contain(f)){

}
else{
fruiList.add(f);
}
}


5. 代码阅读:PersonTest.java(abstract、多态)
   5.1 画出类的继承关系

    ![](http://images2015.cnblogs.com/blog/1109877/201703/1109877-20170318160510745-2025788928.png)


   5.2 读懂main函数,将自己推测的出代码运行结果与真正运行结果进行比较。尝试分析原因
    对四个人的age大小进行排序;
    ![](http://images2015.cnblogs.com/blog/1109877/201703/1109877-20170318162940354-1883758343.png)
    显示 The type Person is already defined 编译不了;

   5.3 子类中里面使用了super构造函数,作用是什么?如果将子类中的super构造函数去掉,行不行?
    作用是引用父类的方法,去掉不行。
   5.4 PersonTest.java中的代码哪里体现了多态?你觉得多态有什么好处?多态和继承有什么关系吗?
    相同的方法名,不同的实现;父类可以赋予子类的变量;
原文地址:https://www.cnblogs.com/zjwl/p/6574750.html