使用對象克隆時要注意,首先要檢查該對象是否可以克隆,即該對象是否實現了
Cloneable
接口,如果該對象實現了這個接口,則該對象可以被克隆,否則將拋出一個
CloneNotSupportException
。
Object
類中有一個
clone
()方法,但是該類沒有實現
Cloneable
接口,所以如果一個
Object
對象直接使用
clone
()方法,將會拋出異常。
Object
的子類如果希望實現克隆,需要實現
Cloneable
接口。在實現接口中的
clone
()方法時,可以直接調用
Object
中的克隆方法,即使用
super.clone
()語句。
在類的繼承中,如果子類中的變量或方法覆蓋了父類中的變量或方法,其父類的變量和方法還是存在于內存中的,在子類中可以使用
super
關鍵字進行訪問。
Java
中,用
abstract
關鍵字修飾不能在類內實現的方法,這樣的方法稱為抽象方法,含有抽象方法的類也必須聲明為
abstract
,這樣的類叫做抽象類。抽象類中不一定包含抽象方法,但是包含抽象方法的類一定要聲明為抽象類。抽象類本身不具備實際的功能,只能用于派生子類,而定義為抽象的方法必須在子類派生時重載。如果一個類被定義為抽象類,則該類不能進行實例化,必須通過重載的方式來實現抽象類中的方法。
編譯時多態
是通過方法的重載來實現的:即用相同的名字在類中定義不同的方法,根據參數的個數、類型和返回值類型來加以區分。而運行時多態是通過類繼承的方法重寫實現的:子類對象可以作為父類對象來使用,因為子類通過繼承具備了父類的所有屬性,在程序中凡是可以使用父類對象的地方,都可以使用子類對象來代替。對于重寫的方法,
Java
會根據調用該方法的實例的類型來決定選擇哪個方法。對子類的實例,如果子類重寫了父類的方法,則運行時系統調用子類的方法,如果子類沒有重寫該方法,則調用父類的方法。因此,一個父類對象可以通過引用子類的實例來調用子類的方法。
?