我覺得乙個高水平的老師可以知識講解的簡單明瞭,而乙個低水平的老師則會把知識更加複雜化,講解的晦澀難懂。原因在於其沒有深刻的理解,抓住事物的本質特徵。其講解的複雜度也就負相關於了學生的理解接收程度。因此本部落格寫作力求深刻理解事物本質,然後用簡潔明瞭的語言將其闡述清楚。
多型,乙個引用變數的多種狀態。具體一點就是,程式定義的父類引用變數所指向的子類物件在程式設計時是不確定的,而是在程式執行期間確定的。怎麼理解?看下面**,現在講太多道理太空洞。
public class test12
}class animal1
}class cat1 extends animal1
}class dog1 extends animal1
}
可以看到,同乙個引用變數a,在不同的時刻既可以指向new cat(),又可以指向new dog()。這就是「多型」。
慢著,以前我們在建立乙個類的物件時,是這樣的cat cat=new cat(),但是卻是這樣animal a=new cat();。這樣做可以嗎?
答案是肯定的。由於cat可以自動「向上轉型」為animal,所以 a 是可以指向cat 的例項物件的。
「向上轉型」的概念是初次接觸,本來應該加以介紹,限於篇幅所限,暫且按住不表。留待下文分解。
繼續說「多型」,看下面code
public class test12
}class animal1
}class cat1 extends animal1
public void eat()
}class dog1 extends animal1
}
在上乙個code的基礎上,為cat增加的eat()方法,並且用父類引用a來呼叫。可以嗎?我們發現編譯都編不過去。在a.eat() 處報錯。eclipse 提示「the method eat() is undefined for the type animal1」。
看看,提示的很清楚!說明什麼,說明現在父類引用a 的型別是animal ,不是cat,因此它能夠呼叫的只能是animal中存在的方法,如果animal中不存在,則無法呼叫。
再看code
public class test12
}class animal1
public void eat()
}class cat1 extends animal1
}class dog1 extends animal1
}
在上面的code中,在animal中寫了eat()方法,然後在父類引用a 處呼叫eat()方法,完全正確。
總結一下,在實現多型以後,父類引用的型別是父類的型別,而不是子類的型別;父類引用可以呼叫的方法是被子類繼承或者重寫的方法。
Java三大特點之多型
多型方法呼叫允許一種型別表現出與其他相似型別之間的區別,只要他們都是從同乙個基類匯出而來的,作用是消除型別之間的耦合關係。下面看一段 class animal3 public void eat class bird3 extends animal3 public void run public cl...
java三大特性之多型
多型 多型的概述 1 多型 事物的多種狀態,polymorphic 物件的多型性 同乙個物件,可能具有不同的名稱,同乙個物件,有不同的型別的引用指向它。本質 同乙個物體有不同的名稱和描述。型別的多型性 同乙個型別,可能具有不同的子類實現。同乙個型別引用,有不同的物件實現。本質 同乙個名字和描述,可以...
Java基礎 三大特性之多型
多型的定義 指允許不同類的物件對同一訊息做出響應。即同一訊息可以根據傳送物件的不同而採用多種不同的行為方式。實現多型的技術稱為 動態繫結 dynamic binding 是指在執行期間判斷所引用物件的實際型別,根據其實際的型別呼叫其相應的方法。多型的作用 消除型別之間的耦合關係。多型三個必要條件 1...