java-繼承


繼承


• 繼承概要

Java繼承是面向對象的最顯著的一個特征。繼承是從已有的類中派生出新的類,新的類能吸收已有類的數據屬性和行為,並能擴展新的能力

繼承所表達的就是一種對象類之間的相交關系,它使得某類對象可以繼承另外一類對象的數據成員和成員方法。若類B繼承類A,則屬於B的對象便具有類A的全部或部分性質(數據屬性)和功能(操作),我們稱被繼承的類A為基類、父類或超類,而稱繼承類B為A的派生類或子類。

繼承的好處:

體現代碼的可復用行、擴展性。

 

• 代碼演示:

Dog狗

/***/
blic class Dog {
/**名稱*/
public String name;
/**顏色*/
public String color;
/**價格*/
public double price;

/**顯示信息*/
public void show(){
    System.out.println("名稱:"+name+",顏色:"+color);
}
}   

Cat貓

/***/
public class Cat {
    /**名稱*/
public String name;
/**顏色*/
public String color;
/**重量*/
public double weight;

/**顯示信息*/
public void show(){
    System.out.println("名稱:"+name+",顏色:"+color);
}
}

zoo動物園

/**動物園*/
public class Zoo {

public static void main(String[] args) {
    Dog dog=new Dog();
    dog.name="吉娃娃狗";
    dog.color="綠色";
    dog.price=19800.7;
    dog.show();

    Cat cat=new Cat();
    cat.name="波斯貓";
    cat.color="紅色";
    cat.weight=18.5;
    cat.show();

}
}   
運行結果:

  上面的代碼實現了基本功能,但有問題,主要是:name,color,show重復,如果系統中的動物類再增加將不停的重復,重復就會帶來不便修改,不便維護的問題。

•實現繼承

要解決上面的問題可以使用繼承,達到代碼復用的目的。

Animal動物 :

package com.demo.test3;
/*動物*/
public class Animal {
    public String name;  //名稱
    public String color; //顏色
    
    //顯示信息
    public void show(){
        System.out.println("名稱:"+name+",顏色:"+color);
    }
}

Dog狗:

package com.demo.test3;
//狗繼承動物
public class Dog extends Animal {
    public double price; //價格
}

Cat貓:

package com.demo.test3;

public class Cat extends Animal {
public double weight; //體重
}

 

Zoo動物園:

package com.demo.test3;

public class Zoo {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.name="吉娃娃";
        dog.color="綠色";
        dog.price=144.1;
        dog.show();
        
        Cat cat = new Cat();
        cat.name="波斯貓";
        cat.color="紅色";
        cat.weight=10.5;
        cat.show();
    }
}

    從示例中可見dog並沒有定義color屬性,但在使用中可以調用,是因為dog繼承了父類Animal,父類的非私有成員將被子類繼承。如果再定義其它的動物類則無須再反復定義name,color與show方法。

•Java繼承的特征

1.傳遞性

  若類C繼承類B,類B繼承類A(多繼承),則類C既有從類B那里繼承下來的屬性與方法,也有從類A那里繼承下來的屬性與方法,還可以有自己新定義的屬性和方法。繼承來的屬性和方法盡管是隱式的,但仍是類C的屬性和方法。

2.單根性

  若類B繼承類A,那么建立類B時只需要再描述與基類(類A)不同的少量特征(數據成員和成員方法)即可。這種做法能減小代碼和數據的冗余度,大大增加程序的重用性。

3.子類調用父類成員

  a.使用super關鍵字調用父類成員

  b.子類默認會先調用父類的無參構造方法,如果父沒有則報錯,可以手動指定,但必須在第一行

實例:

Animal :

package com.demo.test4;
//動物
public class Animal {
    public String name;  //名稱
    public String color; //顏色
    
    public Animal(){
        System.out.println("這是動物類你空構造方法");
    }
    
    public Animal(String name,String color){
        this.name = name;
        this.color = color;
    }
    
    //顯示信息
    public void show(){
        System.out.println("名稱:"+name+",顏色:"+color);
    }

}

Dog  :

package com.demo.test4;

public class Dog extends Animal {
    public Dog(String name,String color,double price) {
        super(name,color); //調用父類構造方法
        this.price=price; //調用當前對象的成員
    }
    
    public double price; //價格
    //重寫父類方法
    public void show(){
        super.show();  //子類調用父類方法
        System.out.println("價格:"+this.price);
    }
}

Cat: :

package com.demo.test4;
//
public class Cat extends Animal{
    public double weight;
}

Zoo :

package com.demo.test4;

public class Zoo {
    public static void main(String[] args) {
        Dog dog = new Dog("中華田園犬","藍色",123.56);
        dog.show();
        
        Cat cat = new Cat();
        cat.name = "波斯貓";
        cat.color = "紅色";
        cat.weight = 18.5;
        cat.show();
    }    
}

 


免責聲明!

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



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