Java- 繼承和多態(tài)
- 可以從現(xiàn)有的類派生出新類。這稱為類的繼承。新類稱為次類、子類或派生類?,F(xiàn)有的類稱為超類、父類或基類。
- 構(gòu)造方法用來構(gòu)造類的實(shí)例。不同于屬性和方法,子類不繼承父類的構(gòu)造方法。它們只能用關(guān)鍵字
super從子類的構(gòu)造方法中調(diào)用。 - 構(gòu)造方法可以調(diào)用重載的構(gòu)造方法或它的父類的構(gòu)造方法。這種調(diào)用必須是構(gòu)造方法的第一條語句。如果沒有顯式地調(diào)用它們中的任何一個,編譯器就會把
super()作為構(gòu)造方法的第一條語句,它調(diào)用的是父類的無參構(gòu)造方法。 - 為了覆蓋一個方法,必須使用與它的父類中的方法相同的簽名來定義子類中的方法。
- 實(shí)例方法只有是可訪問的時候才能覆蓋。這樣,私有方法是不能覆蓋的,因?yàn)樗遣荒茉陬惐旧碇庠L問的。如果子類中定義的方法在父類中時私有的,那么這兩個方法是完全沒有關(guān)系的。
- 靜態(tài)方法與實(shí)例方法一樣可以繼承。但是,靜態(tài)方法不能覆蓋,如果父類中定義的靜態(tài)方法在子類中重新定義,那么父類中定義的方法被隱藏。
- Java 中的每個類都源于
Java.lang.Object類。如果一個類在定義時沒有指定繼承關(guān)系,那么它的父類就是Object。 - 如果一個方法的參數(shù)類型是父類(
例如:Object),可以向該方法的參數(shù)傳遞任何子類(例如:Circle 類或 String 類)的對象。當(dāng)在方法中使用一個對象(例如:Circle對象或String 對象)時,動態(tài)的決定調(diào)用該對象方法(例如:toString)的某個特征的實(shí)現(xiàn)。(C++ 中的使用虛函數(shù)實(shí)現(xiàn)動態(tài)連編)。 - 因?yàn)樽宇惖膶?shí)例總是它的父類的實(shí)例,所以,總是可以將一個子類的實(shí)例轉(zhuǎn)換成一個父類的變量。當(dāng)把父類的實(shí)例轉(zhuǎn)換成它的子類變量時,必須使用轉(zhuǎn)換記號(子類名)進(jìn)行顯式轉(zhuǎn)換,向編譯器表明你的意圖。
- 一個類定義一個類型。子類定義的類型稱為子類型,而父類定義的類型稱為父類型。
- 當(dāng)從引用變量調(diào)用實(shí)例方法時,該變量的實(shí)際類型在運(yùn)行時決定使用該方法的哪個實(shí)現(xiàn)。當(dāng)訪問數(shù)據(jù)域或靜態(tài)方法時,引用變量的聲明類型在編譯時決定使用哪個方法。
- 可以使用表達(dá)式
obj instanceof AClass(對象名 instanceof 類名)測試一個對象是否是一個類的實(shí)例。 - 可以使用
protected修飾符來防止方法和數(shù)據(jù)被不同包的非子類訪問。 - 可以使用
final修飾符來表明一個類是終極的,是不能成為父類的;并且用它來表明一個方法是終極的,是不能覆蓋的。