我們可以發現在繼承後,子類都缺失了自己特有的方法,只有從父類繼承下來的方法,所以為了即擁有從父類繼承的屬性和方法外(遺產),自己也需要有自己的方法(自己的資產)
聯想到顯示中的例子:新的帝王繼承王位,覺得制度不好,為了勵精圖治一般會重新設定新的制度。
子類根據需求對從父類繼承的方法進行重新編寫。
編寫時,可以用super.方法的方式來呼叫父類的方法,構造方法不能被重寫(沒有繼承,重寫無用)。
重寫的規則:比較項
位置方法名
參數列返回值
訪問修飾符
方法重寫
子類相同
相同相同或是其子類
不能嚴於父類
方法過載
同類相同
不相同無關
無關過載規則:必須具有不同的引數列表,可以有個不同的返回值型別,可以有不同的訪問修飾符;可以丟擲不同額異常。
重寫規則:引數列表必須完全相同,否則為過載,而非重寫;返回型別必須一直被與重寫方法相同,否則不能稱其為重寫而是過載;訪問修飾符的限制一定要大於等於被重寫方法的訪問修飾符;重寫方法一定不能拋出新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常。
多型:
父類的引用可以傳入子類的物件。
多型的最基本使用方法:
父類的引用作為方法的形參。
父類的引用可以作為方法的返回值型別。public
void
tohospital
(pet pet)
它是多型使用之後的必然產物,因為多型場景下,無法區分當前的父類引用具體指向了何子類物件。所以可以通過instanceof關鍵字來判斷當前引用了何型別的物件。// 2.父類的引用作為方法的返回值型別
public pet runpet
(int choice)
else
if(choice ==2)
return null;
}
物件名 instanceof 型別名
型別轉型
多型中我們發現:
pet pet = new dog(); 其實就是一種型別轉換而已,類似於double num = 10;
在物件導向這一塊,它被稱為向上型別轉換。
同樣的有了多型之後,有些時候我們得到的是父類引用的物件,但是如果現在希望對子類特有的資訊進行操作,依靠於父類引用無法實現,所以需要向下型別轉換,類似於 int num = (int)10.1;
在型別轉換時,很可能出現問題:父類的引用指向的物件和你要轉換為的型別不匹配,所以為了避免這種問題,一般都要新增instanceof判斷。cat cat = (cat) pet
cat.setgender();
if(pet instanceof cat)
// 判斷要比較的物件 是否是string型別 原因是object型別多型可以傳入任何型別的子類物件 貓、狗
if(anobject instanceof
string
)return
true;}
}return
false
;}
多型方法重寫
多型 指的是一種事物,在不同時刻所表現出來的不同狀態 貓是型別,貓也是一種動物 多型的前提 1.要有繼承關係 2.要有方法重寫,當然不重寫也可以,但是沒有太大意義 3.多型 就是 父類引用指向子類物件 public class mytestclass animal class dog extends...
多型和重寫
多型是基於對抽象方法的覆蓋來實現的,用統一的對外介面來完成不同的功能。過載也是用統一的對外介面 來完成不同的功能。那麼兩者有什麼區別呢?過載,是指允許存在多個同名方法,而這些方法的引數不同。過載的實現是 編譯器根據方法不同的參數列 對同名方法的名稱做修飾。對於編譯器而言,這些同名方法就成了不同的方法...
方法重寫與多型
方法的重寫 子父類出現了一模一樣的方法 注意 返回值型別可以是子父類 子類根據需求對從父類繼承的方法進行重新編寫 重寫時,可以用super.方法的方式來保留父類的方法 構造方法不能被重寫 在繼承的情況下,子類的方法滿足以下條件 1 方法名相同 2 引數列表相同 3 返回值型別相同,或者是父類返回值型...