Java繼承知識整理

一、繼承

繼承是java面向對象編程技術的一塊基石,它允許創建分等級層次的類。

繼承就是子類繼承父類的特徵和行爲,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行爲。

繼承就是指在現有類的基礎上,去構建一個新類,新類成爲子類(派生類),原有的類稱爲父類(基類/超類)。

二、繼承的優缺點

優點:

1.提高代碼的複用性。

2.提高代碼的可維護性。

3.提高開發效率。

缺點:

提高了類與類之間的耦合性。

三、繼承的格式

class 父類{

}
class 子類 extends 父類{
    
}

四、繼承的特性

1.子類擁有父類非private的屬性,方法。

2.子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。

3.子類可以用自己的方式實現父類的方法。(重寫)

4.Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關係就是C類是B類的父類,B類是A類的父類。

例1:

//定義手機類
class Phone{
    //定義手機的價格
    double price = 500;
    //手機都能打電話
    public void call(){
        System.out.println("手機可以打電話");
    }
}
//定義具體的手機類:華爲手機類,讓其繼承手機類Phone
class HuaWei extends Phone{

    //定義子類特有的方法,在子類中可以直接使用父類的非私有的成員變量
    public void show(){
        //輸出父類中定義的手機的價格
        System.out.println(price);
    }
}
//定義測試類
class Test{
    public static  void main(String[] args){
        //創建子類對象
        HuaWei hw = new HuaWei();
        //因爲繼承了Phone類,所以繼承了父類的屬性和方法,所以可以調用父類中的call()方法
        hw.call();
        //調用子類特有的方法,輸出父類中定義的手機價格
        hw.show();
        //子類對象也可以直接調用父類中非私有的成員變量
        System.out.println(hw.price);
    }
}

如果子類定義了與父類同名的變量,那麼在子類中,或在子類對象的調用中,會優先使用子類本身定義的變量,要想使用父類的,需要使用super關鍵字調用。

例2:

//定義手機類
class Phone_2{
    //定義手機的價格
    double price = 500;

}
//定義具體的手機類:華爲手機類,讓其繼承手機類Phone
class HuaWei_2 extends Phone_2{
    //定義手機的價格,變量名與父類相同
    double price = 600;
    //定義子類特有的方法
    public void show(){
        //這裏會優先使用子類本身定義的變量price
        System.out.println(price);
        //輸出父類的要使用super關鍵字調用
        System.out.println(super.price);
    }
}
//定義測試類
class Test_2{
    public static  void main(String[] args){
        //創建子類對象
        HuaWei_2 hw_2 = new HuaWei_2();
        //調用子類特有的方法,輸出子類本身定義的手機價格,和父類中定義的價格
        hw_2.show();

//子類對象調用price
System.out.println(hw_2.price);



    }
}

在子類中定義了與父類中一模一樣的成員方法(權限大於或等於父類方法的權限),此操作稱之爲方法重寫。

當子類對象調用方法是,會優先調用自己重寫後方法,如果沒有重寫,那麼纔會去調用父類中的方法。

例3:

//定義手機類
class Phone_3{
    //定義打電話方法
    public void call(){
        System.out.println("手機可以打電話!");
    }
}
//定義具體的手機類:華爲手機類,讓其繼承手機類Phone
class HuaWei_3 extends Phone_3{
    //重寫父類中的打電話方法
    @Override
    public void call() {
        //使用super關鍵字調用父類中的call方法
        super.call();
        System.out.println("華爲手機當然可以打電話!");
    }
}
//定義測試類
class Test_3{
    public static  void main(String[] args){
        //創建子類對象
        HuaWei_3 hw_3 = new HuaWei_3();
        //優先調用子類重寫後的方法
        hw_3.call();
    }
}

注意:

被final修飾的類和方法,不能被繼承和重寫!

子類不能繼承父類的構造器(構造方法或者構造函數),如果父類的構造器帶有參數,則必須在子類的構造器中顯式地通過 super 關鍵字調用父類的構造器並配以適當的參數列表。

如果父類構造器沒有參數,則在子類的構造器中不需要使用 super 關鍵字調用父類構造器,系統會自動調用父類的無參構造器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章