【學習筆記】 唐大仕—Java程式設計 第5講 深入理解Java語言之5.2 多型及虛方法呼叫
阿新 • • 發佈:2018-11-07
/**
* 多型及虛方法呼叫
* @author cnRicky
* @date 2018.11.7
*/
多型
- 多型(Polymorphism)是指一個程式中相同的名字表示不同的含義的情況
- 多型有兩種情形
編譯時多型:
*過載(Overload)(多個同名的不同方法)
*如 p.sayHello();p.sayHellow("Wang");
執行時多型:
*覆蓋(Override)(子類對父類方法進行覆蓋)
*動態繫結(dynamic binding)---虛方法呼叫(virtual method invoking) - 多型的特點大大提高了程式的抽象程度和簡潔性
上溯造型
- 上溯造型(upcasting)
是把派生型別當做基本型別處理 - Person p = new Student();
void fun(Person p){
... } fun(new Student());
虛方法呼叫
- 用虛方法呼叫,可以實現執行時多型!
子類過載了父類方法時
執行時系統根據該方法的例項的型別來決定選擇哪個方法呼叫 - 所有的非final方法都會自動地進行動態繫結!
動態型別確定
- 變數instanceof型別
- 結果是boolean值
什麼情況不是虛方法呼叫
- Java中,普通的方法是虛方法
- 但static,private方法不是虛方法呼叫
- static,private與虛方法編譯後用的指令是不同的
三種非虛的方法
- static的方法,以宣告的型別為準,與例項型別無關
- private方法子類看不見,也不會被虛化
- final方法子類不能覆蓋,不存在虛化問題