201711671203《Java程序设计》第六周学习报告

教材内容总结

首先是子类与继承

Java的继承类似于C++,但又有所不同。在Java中,需要使用关键字extends来定义一个类的子类

class 子类名 extends 父类名{
...
}

其次Java的类按继承关系形成树形结构,其根节点是Object类(Object是Java.lang包中的类)所有的类都是Object的子类,若声明类的时候没有使用extends,则这个类被系统默认是Object的子类。              与c++不同,c++使用public、protect、private作为区分继承的类型,Java中若子类与父类在同一个包中,那么子类自然地继承其父类中不是private的成员变量和方法作为自己的成员变量,若不在同一个包中,则子类只继承protected和public的成员变量和方法。

与c++相同,用子类的构造方法创建对象时,不仅子类中声明的成员变量被分配了内存空间,父类的成员变量也分配了内存空间,但只将子类继承的那部分成员变量作为分配给子类对象的变量。但我们可以通过继承父类中可以操作那部分未继承的变量的方法来操作这部分未继承的变量。

在编写子类时,如果我们声明的成员变量的名字与父类继承来的成员变量的名字相同(声明的类型可以不同),这种时候继承过来的成员变量会被隐藏,但我们仍可以通过调用父类继承的方法操作被子类隐藏的成员变量。       其次,子类也可以通过重写可以隐藏已继承的方法(被称为方法覆盖)。它的语法规则是,在子类中定义一个方法,该方法的类型与父类的方法的类型一致或者是父类方法的类型的子类型(即若父类的方法类型时类,那么允许子类的重写方法时子类),且方法的名字,参数个数,参数类型都和父类方法完全相同。(若类型不同,那么该方法就不是重写,此时在子类有两个同名的方法,这是不允许的,此时编译错误)

子类一单隐藏了继承的成员变量,那么子类创建的对象不再拥有该变量,该变量将归关键字super所拥有,同样的,被隐藏的方法也是一样。

我们都知道,用子类的构造方法创建一个子类的对象,子类的构造方法总是先调用父类的某个构造方法,若子类没有指明使用父类的那个构造方法,,则默认调用无参构造方法。又因为子类不继承父类的构造方法,因此子类再起构造方法中须使用super来调用构造方法,且super必须是子类构造方法的头一条语句,若没有明显写出super,那么默认有

super();

我们又知道,当类中自定义了一个或多个构造函数后,Java将不提供默认的构造方法,因此当在父类中定义多个构造方法时,应当包括一个不带参数的构造方法,以防子类省略super时出现错误。例子:

class student{
...

student();

student(int number,String name)
}

class a extends student{
    a(int number,String name){

    super(number,name);
...
}
}

 再者有关键字final,若用final将类声明为final类,则final类不能被继承,用final修饰方法,则该方法不允许子类重写,用final修饰成员变量或局部变量,那么它就是常量,常量在运行期间不允许变化,同时常量没有默认值,需要程序在声明常量时指定该常量的值。

然后是上转型对象,假设animal类是tiger类的父类。

Animal a;
tiger b =new Tiger();
a = b

这时称a是b的上转型对象(好比如“老虎是动物”)

上转型对象不能操作子类新增的成员变量和方法吗,但他可以访问子类继承或隐藏的成员变量和方法。

当一个类有很多子类时,并且这些子类都重写父类中的某个方法,当把子类创建的对象的引用方法一个父类的对象时,就得到该对象的上转型对象,那么这个上转型对象在调用这个方法是就可能具有多种形态。多态性就是指父类的某个方法在被其子类重写时,可以各自产生自己的功能行为

class  动物 {
   void cry() {
   }  
}
class 狗 extends 动物 {
   void cry() {
      System.out.println("汪汪....."); 
   }  
}
class 猫 extends 动物  {
   void cry() {
      System.out.println("喵喵....."); 
   }  
}
public class Example5_11 { 
   public static void main(String args[]) {
      动物 animal;
      animal = new 狗();
      animal.cry(); 
      animal=new 猫();
      animal.cry();
  }
}

教材学习过程中遇到的问题

关于抽象类的使用不太理解

代码调试遇到的问题

  代码行数 博客量 学习时间  
目标        
第一周 53 1 3  
第二周 186 1 5 调整思维
第三周 134 1 4  

第五周

233 1 6 投入学习
第六周 425/1011 1/5 9/27  

猜你喜欢

转载自blog.csdn.net/Joan_of_arc_Alter/article/details/83116801
今日推荐