JAVA-繼承和多型
阿新 • • 發佈:2021-07-28
1.繼承
- 繼承:面向物件程式設計支援從已經存在的類中定義新的類.
1.父類和子類
- 若類c1繼承自另一個類c2:
c1:子類(繼承類,派生類); c2:超類(父類,基類) - 子類從父類中繼承可訪問的資料域和方法,還可以新增新得資料域和方法.
注意事項:
- 子類並不是父類的一個子集,子類一般比父類包含更多的資訊和方法.
- 父類中的私有資料域在該類外是不可訪問的,不能在子類中直接使用.但可使用公共的修改/訪問器來對其進行操作.
- 不是所有is-a關係都可以用繼承建模.(正方形不應該繼承矩形,因為其不適於用長,寬屬性,其應該繼承於Geom...類)
- Java不允許多重繼承(幾個類派生出一個子類),但可通過介面來實現.
2.extends
-
關鍵詞extends告訴編譯器A繼承自B類,則A可以用B的資料域以及方法
public class A extends B{}
3.super
- 關鍵字super指代父類,可以用於呼叫父類中的普通方法和構造方法.
- 呼叫父類的構造方法: super()/super(arguments);
若要呼叫父類的構造方法,必須使用super關鍵字且置於構造方法的第一條語句. - 構造方法鏈:任何情況下,構造一個類的例項時將會呼叫沿著繼承鏈的所有父類的構造方法.
構造一個子類的物件時,子類的構造方法會在完成自己的任務之前,首先呼叫它的父類的構造方法,...持續到最後一個構造方法被呼叫為止.
構造方法可以呼叫過載的構造方法或父類的構造方法.若它們都沒有被顯式地呼叫,編譯器會自動將super()作為構造方法的第一條語句. - 若要設計一個可被繼承的類,最好提供一個無參構造方法以避免錯誤(最好為每個類提供一個無參構造方法)
- 呼叫父類的普通方法: super.方法名(argument);
2.方法重寫
- 要重寫一個方法,需在子類中使用和父類一樣的簽名來對該方法進行定義.
注:
- 重寫的方法必須與被重寫的方法具有一樣的簽名,一樣或相容的返回型別.
- 僅當例項方法可訪問時才可被重寫
- 與例項方法一樣,靜態方法也可被繼承,但其不可被重寫(父類的靜態方法在子類中被重新定義,則父類的靜態方法被隱藏,此時可用父類名.靜態方法名來呼叫)
3. 方法重寫和過載
- 過載: 使用同樣的名字但是不同的簽名來定義多個方法.
- 重寫: 在子類中提供一個對方法的新的實現.
注:
-
方法重寫發生在具有繼承關係的不同類中;方法過載可以發生在同一個類中,也可以發生在具有繼承關係的不同類中.
-
方法重寫具有同樣的簽名;方法過載具有同樣的名字但是不同的引數列表.
為避免錯誤,可使用重寫標註:在子類的方法前放一個@Override.
該標註表示被標註的方法必須重寫父類的一個方法.
eg.public class A extends B{
@Override
public String toString(){
return super.toString() + "wow!";
}
}