Java多型可以藉由實作(Implementation)介面(Interface)來實現,或者是說藉由繼承 (Extends)來實現, 以下先介紹實作(Implementation)介面(Interface)的方式
===========================================
接下來是採取繼承(Extends)的方式
在這裡比較特別的是Human hm=new Man();這行敘述,雖然是以Human的型態宣告,
但是卻以Man class來實體化類別,所以在執行的時候還是以實體化的class為主.
為了更明確的觀察這個現象,我們把eat method改成下列:
private void eat(Man m){
m.eat();
}
在這個形況下會出現compile time error.
因為eat method只接受Man型態的物件,所以宣告為Human型態的物件無法被接受.
因為Human為Man的父類別(Super class)所以可以向下轉型(Cast)為Man型態:
(註,但woman類別無法轉型為man)
tester.eat((Man)hm);
可是如果我們接著把Human hm=new Man();的宣告改為Human hm=new Human();並不會出現compile time error,可是在執行的時候
因為實體化的類別為Human,並非Man,因此會出現runtime classcast exception.
在此我們得到一個結論:
Java在compile time的時候是檢查宣告的類別是否可以在某個方法裡被使用,
但是在執行的時候,會以實際的實體化類別所定義的方法來執行
======================================================
接下來我們討論當Man這個Class繼承了Human同時實作了介面Action,會更明顯的看出多型的威力
eat這個行為,可以從Human的觀點去執行,也可以從吃的這個動作的觀點來執行.
網頁
BloggerAds 廣告
標籤
- Java (96)
- Android (27)
- 演算法 (21)
- c++ (19)
- JavaScript (7)
- OpenMp (6)
- Design Pattern (4)
- 日文歌曲 (4)
- 資料結構 (4)
- Foundation Knowledge Of Programming (3)
- QUT (2)
- CodingHomeWork (1)
- Database (1)
- 英文歌詞 (1)
搜尋此網誌
我的網誌清單
標籤
日文歌曲
(4)
股市
(7)
股票
(9)
英文歌詞
(1)
時事
(1)
硬體(hardware)
(1)
資料結構
(4)
演算法
(21)
數學(Math)
(4)
ACM
(3)
ajax
(7)
algorithms
(1)
Android
(27)
Blog Notes(部落格記事)
(6)
C
(9)
c++
(19)
CodingHomeWork
(1)
Database
(1)
Design Pattern
(4)
Foundation Knowledge Of Programming
(3)
GWT
(1)
How
(2)
J2EE
(1)
Java
(96)
Java語言
(4)
JavaScript
(7)
Leetcode
(4)
LOL
(1)
OpenMp
(6)
QUT
(2)
Uva
(2)
Yahoo知識問答
(11)
沒有留言:
張貼留言