1. 程式人生 > >【學習筆記】 唐大仕—Java程式設計 第5講 深入理解Java語言之5.2 多型及虛方法呼叫

【學習筆記】 唐大仕—Java程式設計 第5講 深入理解Java語言之5.2 多型及虛方法呼叫

/**
* 多型及虛方法呼叫
* @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方法子類不能覆蓋,不存在虛化問題