封裝、繼承和多型

N1ce2cu發表於2024-07-13

封裝

  • 1、良好的封裝能夠減少耦合。
  • 2、類內部的結構可以自由修改。
  • 3、可以對成員進行更精確的控制。
  • 4、隱藏資訊,實現細節。

繼承

  • Java 有三種實現多繼承效果的方式,分別是內部類、多層繼承和實現介面。

  • 父類的構造方法不能被繼承

  • 子類的構造過程必須呼叫其父類的構造方法:Java 虛擬機器構造子類物件前會先構造父類物件,父類物件構造完成之後再來構造子類特有的屬性,這被稱為記憶體疊加。

  • 如果子類的構造方法中沒有顯示地呼叫父類構造方法,則系統預設呼叫父類無引數的構造方法。

  • Java子類重寫繼承的方法時,不可以降低方法的訪問許可權子類繼承父類的訪問修飾符作用域不能比父類小

  • 繼承當中子類丟擲的異常必須是父類丟擲的異常或父類丟擲異常的子異常。

static修飾符

class C1{
    public  int a;
    public C1(){}
   // public static C1(){}// 構造方法不允許被宣告為static
    public static void doA() {}
    public static void doB() {}
}
class C2 extends C1{
    public static  void doC()//靜態方法中不存在當前物件,因而不能使用this和super。
    {
        //System.out.println(super.a);
    }
    public static void doA(){}//靜態方法能被靜態方法重寫
   // public void doB(){}//靜態方法不能被非靜態方法重寫
}

子類父類初始化順序

  1. 父類中靜態成員變數和靜態程式碼塊
  2. 子類中靜態成員變數和靜態程式碼塊
  3. 父類中普通成員變數和程式碼塊,父類的構造方法
  4. 子類中普通成員變數和程式碼塊,子類的構造方法
class Father{
    // 父類構造方法 第四
    public Father() {
        System.out.println(++b1+"父類構造方法");
    }

    // 父類static 第一 注意順序
    static int a1=0;
    static {
        System.out.println(++a1+"父類static");
    }

    // 父類成員變數和程式碼塊 第三
    int b1=a1;
    {
        System.out.println(++b1+"父類程式碼塊");
    }
}
class Son extends Father{
    // 子類構造方法 第六
    public Son() {
        System.out.println(++b2+"子類構造方法");
    }

    // 子類static第二步
    static {
        System.out.println(++a1+"子類static");
    }

    // 子類成員變數和程式碼塊 第五
    int b2=b1;
    {
        System.out.println(++b2 + "子類程式碼塊");
    }
}

多型

Java 的多型是指在物件導向程式設計中,同一個類的物件在不同情況下表現出來的不同行為和狀態。

  • 子類可以繼承父類的欄位和方法,子類物件可以直接使用父類中的方法和欄位(私有的不行)。
  • 子類可以重寫從父類繼承來的方法,使得子類物件呼叫這個方法時表現出不同的行為。
  • 可以將子類物件賦給父類型別的引用,這樣就可以透過父類型別的引用呼叫子類中重寫的方法,實現多型。

多型的前提條件

  • 子類繼承父類
  • 子類重寫父類的方法
  • 父類引用指向子類的物件

相關文章