1. 程式人生 > 其它 >JAVA-繼承和多型

JAVA-繼承和多型

1.繼承

  • 繼承:面向物件程式設計支援從已經存在的類中定義新的類.

1.父類和子類

  1. 若類c1繼承自另一個類c2:
    c1:子類(繼承類,派生類); c2:超類(父類,基類)
  2. 子類從父類中繼承可訪問的資料域和方法,還可以新增新得資料域和方法.

注意事項:

  1. 子類並不是父類的一個子集,子類一般比父類包含更多的資訊和方法.
  2. 父類中的私有資料域在該類外是不可訪問的,不能在子類中直接使用.但可使用公共的修改/訪問器來對其進行操作.
  3. 不是所有is-a關係都可以用繼承建模.(正方形不應該繼承矩形,因為其不適於用長,寬屬性,其應該繼承於Geom...類)
  4. Java不允許多重繼承(幾個類派生出一個子類),但可通過介面來實現.

2.extends

  • 關鍵詞extends告訴編譯器A繼承自B類,則A可以用B的資料域以及方法

    public class A extends B{}

3.super

  • 關鍵字super指代父類,可以用於呼叫父類中的普通方法和構造方法.
  1. 呼叫父類的構造方法: super()/super(arguments);
    若要呼叫父類的構造方法,必須使用super關鍵字且置於構造方法的第一條語句.
  2. 構造方法鏈:任何情況下,構造一個類的例項時將會呼叫沿著繼承鏈的所有父類的構造方法.
    構造一個子類的物件時,子類的構造方法會在完成自己的任務之前,首先呼叫它的父類的構造方法,...持續到最後一個構造方法被呼叫為止.
    構造方法可以呼叫過載的構造方法或父類的構造方法.若它們都沒有被顯式地呼叫,編譯器會自動將super()作為構造方法的第一條語句.
  3. 若要設計一個可被繼承的類,最好提供一個無參構造方法以避免錯誤(最好為每個類提供一個無參構造方法)
  4. 呼叫父類的普通方法: super.方法名(argument);

2.方法重寫

  • 要重寫一個方法,需在子類中使用和父類一樣的簽名來對該方法進行定義.

注:

  1. 重寫的方法必須與被重寫的方法具有一樣的簽名,一樣或相容的返回型別.
  2. 僅當例項方法可訪問時才可被重寫
  3. 與例項方法一樣,靜態方法也可被繼承,但其不可被重寫(父類的靜態方法在子類中被重新定義,則父類的靜態方法被隱藏,此時可用父類名.靜態方法名來呼叫)

3. 方法重寫和過載

  • 過載: 使用同樣的名字但是不同的簽名來定義多個方法.
  • 重寫: 在子類中提供一個對方法的新的實現.

注:

  1. 方法重寫發生在具有繼承關係的不同類中;方法過載可以發生在同一個類中,也可以發生在具有繼承關係的不同類中.

  2. 方法重寫具有同樣的簽名;方法過載具有同樣的名字但是不同的引數列表.
    為避免錯誤,可使用重寫標註:在子類的方法前放一個@Override.
    該標註表示被標註的方法必須重寫父類的一個方法.
    eg.

    public class A extends B{
    @Override
    public String toString(){
    return super.toString() + "wow!";
    }
    }