1. 程式人生 > >Java繼承(上)

Java繼承(上)

特點:

1.利於程式碼複用

2.縮短開發週期

  • 一種類與類之間的關係

  • 使用已存在的類的定義作為基礎建立新類

  • 新類的定義可以增加新的資料或新的功能,也可以用父類的功能,但不能選擇性地繼承父類

繼承的關係

滿足“A is a B”的關係就可以形成繼承關係

繼承的實現

通過extends關鍵字實現

例:

編寫父類

class Animal{
    //公共的屬性和方法
}

編寫子類,繼承父類

class Dog extends Animal{
    //子類特有的屬性和方法
}
​
class Cat extends Animal{
    ...
}

子類可以直接訪問父類的非私有成員

父類不可以訪問子類的特有成員(公有的也不行)

方法重寫

方法重寫與方法過載的區別:

方法過載:

1.在同一個類中

2.方法名相同,引數列表不同(順序、個數、型別)

3.方法返回值、訪問修飾符任意

4.與方法的引數名無關

方法重寫:

1.在有繼承關係的子類中

2.如下

  • 方法名

  • 引數型別、順序、個數

都要與父類繼承的方法完全相同,方法返回值型別可以是父類的子類(即返回值型別與父類相容)

3.訪問修飾符允許改變,但訪問範圍需要大於等於父類的訪問範圍

4.與方法引數名無關

當子類重寫父類方法後,子類物件呼叫的是重寫後的方法

子類中可以定義與父類重名的屬性,子類物件呼叫時會呼叫子類中的重名屬性

訪問修飾符

  • 公有的:public :允許在任意位置訪問

  • 私有的:private:只允許在本類中進行訪問

  • 受保護的:protected:允許當前類、同包子類/非子類、跨包子類呼叫;跨包非子類不允許

  • 預設:允許在當前類、同包子類/非子類呼叫:跨包子類不允許

訪問修飾符 本類 同包 子類 其他
private
預設
protected
public

super關鍵字的使用

super:父類物件的引用

父類的構造不允許被繼承和重寫

子類構造預設呼叫父類的無參構造方法

可以通過super()呼叫父類允許訪問的其他構造方法(直接在super的括號里加引數即可)

通過super呼叫父類其他構造方法時,super()必須放在子類構造方法有效程式碼的第一行

總結:

  • 代表父類引用

    1.訪問父類成員方法——super.print();

    2.訪問父類屬性——super.name;

    3.訪問父類構造方法——super();

  • 子類的構造過程中必須呼叫其父類的構造方法

  • 如果子類的構造方法中沒有顯式標註,則系統預設呼叫父類的無參構造方法

  • 如果子類的構造方法中既沒有顯式標註,且父類中沒有無參構造方法,則編譯出錯

繼承後的初始化順序

1.父類靜態成員

2.子類靜態成員

3.父類物件構造

4.子類物件構造

訪問修飾符不影響成員載入順序,跟書寫位置有關

this和super

都不能在靜態方法中被呼叫

this呼叫本類的構造方法,super呼叫父類的構造方法

構造方法呼叫時都必須放在第一行

this和super不能共存

總結

this:當前類物件的引用

1.訪問當前類的成員方法

2.訪問當前類的成員屬性

3.訪問當前類的構造方法

4.不能在靜態方法中使用

super:父類物件的引用

1.訪問父類的成員方法

2.訪問父類的成員屬性

3.訪問父類的構造方法

4.不能在靜態方法中使用