繼承是面向對象方法中的一個重要概念。特殊類擁有一般類的屬性和操作。稱為特殊類對一般類的繼承。繼承是一種由已有類來擴展新類的機制,也是面向對象技術可提高軟件開發效率的一個重要原因。
多態是指一不同方式響應同一方法調用的能力。
在子類中,不能直接訪問從父類中 繼承的私有成員和方法。但可以通過調用從高父類繼承的公有方法(這個方法返回了父類中的私有變量和方法)達到間接調用的目的
對于可直接訪問的靜態成員變量,父類、子類、父類對象及子類對象均共享同一個靜態變量。
子類的構造方法:
在類的繼承層次結構中,父類和子類都有字節構造方法。但子類不會繼承父類的構造方法。但子類對象中既包含了從直接父類繼承類的成員變量,也包含了它新定義的成員變量,為了構造一個子類對象,必須對所有這些變量進行正確的初始話。在調用子類的構造方法的時候,子類的構造方法又會在不顯示調用父類構造方法的情況下隱式調用父類的默認構造方法(即什么參數都沒有的那種)。當然父類構造方法有參數或者怎樣,你可以用super()顯示調用父類的構造方法,但這個方法必須在子類構造方法的第一句。
方法的覆蓋和成員變量的隱藏
方法的覆蓋:在子類中定義一個與父類中的方法具有相同聲明的實例成員方法叫做子類成員方法對哦父類方法的覆蓋,簡稱覆蓋。
成員變量的隱藏:子類中定義了與父類中相同的成員變量時。這時,在子類對象中,雖然從父類繼承的成員變量仍然存在,但是已經無法直接訪問它了,必須使用super關鍵字或父類的一個應用調用它了。這就是成員變量的隱藏
注意一點:如果有兩個類,一個類來自父類,一個類來自子類。然后一個變量來自父類,在子類中也有同名的變量。那么在子類調用繼承來自父類的方法時,使用的仍然是父類的那個變量。而在子類中調用子類定義的方法,使用同名變量來自子類定義的變量。
父類變量引用子類對象:通過父類引用變量引用子類對象時,父類引用變量只能調用子類對象中從父類所繼承來的或重定義的方法,調用子類對象中自己額外定義的方法會導致編譯錯誤。
instanceof運算符用來判斷左邊的表達式的對象是否屬于右邊類的子類或同一個類。是則返回true否則false
final關鍵字
final關鍵字可用來修飾類、方法、變量
修飾類:當用final關鍵字修飾某個類時,這是,該類就不能被其他類繼承。通常我們也將final類稱為終結類
修飾方法:用final關鍵字修飾某個方法時,則該方法不能被子類中的方法進行覆蓋。
修飾變量:final關鍵字修飾的變量只能被賦值一次,賦值以后,該值不能被再改變
抽象類和接口:
抽象類要在類名前加一個abstract修飾。另外類中必須有[f訪問修飾符] abstract 返回類型 方法名稱(【參數列表】);定義抽象方法是沒有實體的。抽象類是不可以實例化的。
從一個抽象父類中派生子類時,有兩種情況。第一種情況,只要沒把所有的抽象方法具體實現完,該類還是抽象類。第二種是全部實現完的類,這個類才可以被實例化。
在一個抽象類中也可以有成員變量;另外在一個抽象類中也可以有不是abstract修飾的成員方法。
定義接口
[修飾符] interface 接口名 [extends 接口名]{
static final 數據類型 常量名=常量數據;
返回值類型 方法名(【參數】);
}
接口中所有方法和屬性都只能用public修飾。所以public可以省去,另外接口中所有方法都要求是abstract所以也可以不寫。
接口的實現:implements關鍵字
關于繼承多態:與繼承有關的多態:在一個類的繼承體系層次中,如果一個子類覆蓋了父類中的某個實例方法,當我們用一個引用了子類對象的父類變量調用被覆蓋的方法時。此時,程序執行的是具體的子類對象中的方法。
關于接口的多態:與接口有關的特性是指用一個接口類型的變量引用實現了該接口的類的對象時,調用某個接口方法時,是執行的引用的那個對象里具體的方法。