Java學習筆記---繼承和super的用法


 

自從換了個視頻教學,感覺比原來那個好多了,就是學校網速太渣,好多視頻看一會卡半天,只能先看看已經下載的了.

不過也好,雖然不能從開始開始重新開,但是已經看過一次,在看一次也是好的,就當鞏固學習了.

 

繼承的關鍵字:extends

格式如下: class 子類名 extends父類名{

...

}

例如 學生是繼承人類這一父類的.

class student extends person{

...

}

如果一個類的聲明沒有使用關鍵字extends,則這個類默認是繼承Object類的.Object是所有類的父類.Object是java.lang包中的類.

當一個子類繼承了一個父類時,子類可以調用父類中的所有方法和成員變量.子類也可以單獨自己聲明方法或者變量.

下面的代碼創建了4個class.分別是Dog,Cat,Animal和包含主函數的Main類.其中Dog和Cat是繼承父類Animal的.

 

Cat繼承Animal類:

package com.cnblogs;

public class Cat extends Animal{  

//不帶參數的默認構造器

 public Cat(){   

//super();必須出現在構造方法的首行.   //this();也如此.  

     super();

 // super("XX",10);  該代碼表示調用父類帶參的構造器  

 System.out.println("Cat構造器");  }

 /* public String name;

   public int age;  

   public void walk(){

    System.out.println("Cat....walk");  

}

 public void sleep(){

    System.out.println("Cat....sleep");

 }  */

 //注解提示

@Override  

public void how(){

    System.out.println(name +" "+ "Cat....miaomiao");  

//super 強制調用父類的show()方法法.

//如果沒有super,show();是this.show();的默認寫法.   

//步驟是:先調用子類的show()方法.子類如果沒有show方法才調用父類的show()方法  

    super.show();

 }

 public void show(){

    System.out.println(name +" "+ "Cat----->show");  

}

}

聲明Dog類:

package com.cnblogs;

public class Dog extends Animal {  

/*public String name;

   public int age;  

   public void walk(){

      System.out.println("Dog....walk");  

}  

   public void sleep(){  

     System.out.println("Dog....sleep");

 }  */

   public void how(){  

     System.out.println(name +" "+ "Dog....wangwang");  }

}

 

創建一個Animal的父類:

package com.cnblogs;

//Animal不寫繼承就是默認繼承Object類. //抽象類不能new.傳入的是子類的實例對象.

public abstract class Animal extends Object{  

    public String name;

    public int age;  

//默認的不帶參的構造器

 public Animal(){  

    this("baobao",2);

//this();調用的是下面帶參的Animal的方法   

    System.out.println("Animal--->()");

 }  

//帶參的構造器.給屬性賦初始值

public Animal(String name,int age){   

    this.name = name;  

    this.age = age;  

    System.out.println("Animal--->(name,age)");

 }  

public void walk(){

    System.out.println(name + "---->walk");   

    sleep();

    how();

//this.show 調用的是子類的show()方法,如果子類沒有show()方法.在調用父類的show()方法.  

    this.show();

 }  

 public void sleep(){

    System.out.println(name + "---->sleep");

 }  

//抽象方法.

 public abstract void how();  

 public void eat(){

    System.out.println(name + "---->Eat");

 }  

 public void play(){ 

    System.out.println(name + "---->Play");

 }

 public void show(){

    System.out.println(name +" "+ "Animal---->show");

}

}

 Main類(包含主函數):

 

package com.cnblogs;

 

public class Main {

 

 public static void main2(String[] args) {  

 //生成一個cat對象

    Cat cat = new Cat();  

    cat.name ="xiaohua";  

    cat.age = 3;  

    cat.walk();   

    cat.how();   

//生成一個dog對象  

    Dog dog = new Dog();  

    dog.name = "xiaomei";   

    dog.age= 3;  

    dog.walk();  

    dog.eat();  

    dog.how();  

 //調用的是調出來的對象  

    Animal animal = new Cat();

    animal.name = "HH";

  //調用的是子類Cat()的how()方法.   

    animal.how();   

    Animal animal2 = new Dog();

    animal2.name = "XX";  

 //調用的是子類Dog()的how方法  

    animal2.how();      

    animal.walk();     

 //GetMsg方法要求傳入的是子類cat,所以傳入的必須是cat,而不能是animal.  

    GetMsg(cat);  

    GetMsg(dog);  

    GetMsg(animal2);

 }  

/* public static void GetMsg(Cat cat){

  cat.how();  

}*/  

//將子類的對象傳入給父類的引用   //比上面的傳入單獨的cat靈活,一般使用下面這種方法  

public static void GetMsg(Animal animal){

    animal.how();   

}  

/** *1. new一個對象以后先調用子類Cat的第一個方法,運行super();調用父類Animal的第一個方法   

  *2. 父類中的構造方法執行this();方法,this方法又調用Animal帶參數的方法並輸出;在返回不帶參的構造器執行this();下面的輸出語句   

  *3. 在返回子類Cat中執行super();下面的語句,輸出"Cat構造器"   

  *4. 接着animal.how()調用new出來的對象 cat的how()方法   

  *5. 執行子類Cat()方法中的how()方法,並輸出.   

  *6. 接着在運行how()方法中的super().show;然后調用父類Animal的show()方法.並輸出相應的結果.    * */  

public static void main(String [] args){  

    Animal animal = new Cat();   

    animal.how();   }

}

 

super();調用父類的構造器,方法和屬性.

this();調用該方法的當前對象.

 

今天博客園居然不能插入代碼塊,不知道出什么問題只能自己手寫,寫了半天.看的頭都暈了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM