基礎知識多肽回顧:
1.多肽是方法的多肽,不是屬性的多肽(多肽與屬性無關)。
2.多肽的存在有三個必要條件:繼承、方法重寫、父類引用指向子類物件。
3.父類引用指向子類物件後,用該父類引用呼叫子類重寫的方法,此時多肽就出現了。
詳細舉例:
這裡有繼承,有方法重寫,但是缺少父類引用指向子類物件。
class allanimal
}class cat extends allanimal
}class fish extends allanimal
public void cando()
}
這樣就產生了多肽:父類引用指向子類物件(也是自動向上轉型)。
public static void main(string args)
自動向上轉型示例:
//自動向上轉型
allanimal a=new fish();
a.speak(); //我是魚
分析:這裡從編譯器的角度,首先你要知道編譯器是個"笨蛋"!它就認為a就是allanimal,它首先會去allanimal類中找到speak()方法,發現有這個方法,則編譯通過。(實際上a是指向的子類fish)
向上轉型的缺陷:
allanimal a=new fish();
a.cando();//報錯
按照上面所說編譯器認為a就是allanimal,那麼首先會去allanimal中找cando()方法,但是沒有找打,這個方法是子類增加的新方法,編譯則不通過。
牢牢記住一句話:無論向上向下轉型,編譯看左邊,執行看右邊。
意思就是:編譯時候左邊的物件有沒有該方法(不嚴謹),執行時候看new的物件是誰,就呼叫誰的方法
為了解決上述問題,引入強制向下轉型:
allanimal a=new fish();
a.speak();
//強制向下轉型
fish a1=(fish)a;
a1.cando();
JAVA筆記 多型的意義(向上轉型與向下轉型)
多型是物件導向的重要特性,簡單點說 乙個介面,多種實現 就是同一種事物表現出的多種形態。程式設計其實就是乙個將具體世界進行抽象化的過程,多型就是抽象化的一種體現,把一系列具體事物的共同點抽象出來,再通過這個抽象的事物,與不同的具體事物進行對話。對不同類的物件發出相同的訊息將會有不同的行為。比如,你的...
Java向上向下轉型
向上轉型 b extends a,a a new b 就是向上轉型,此時a的型別為a,指向b,可以理解為把子類物件轉換成了父類物件,即父類的引用指向子類的物件,此時a不能呼叫子類自己新建的方法和變數,但若子類中重寫了父類的某個方法,那麼在呼叫這個方法時,將會呼叫子類的這個方法。向上轉型不存在風險 向...
Java的向上轉型和向下轉型
開源共享 名詞 向上轉型 upcasting 和向下轉型 downcasting 例1 有兩個類,father父類 son子類繼承自父類father father fr new son 這樣把子類物件son 直接賦給父類引用fr叫向上轉型 upcasting 這裡fr引用指向的是son物件。son ...