Re: [問題] 還是不太懂多型
※ 引述《s66449 (閒泡菜)》之銘言:
: 推 qrtt1:不太懂,又用不到就先跳過吧。 10/25 21:42
: 推 yyc1217:假設你現在要寫一個動物園 你有Animal類別跟許多繼承於 10/25 22:38
: → yyc1217:Animal的其他動物類別(假設有Dog及Cat) 10/25 22:40
: → yyc1217:現在你不知道程式傳進來的是dog還是cat 10/25 22:42
: 推 liyard:看到中文命名我頭好痛orz 10/25 22:45
: 推 yyc1217:所以你會宣告一個Animal參數 用來指向任一個傳進來的物件 10/25 22:45
: → yyc1217:但你不能宣告cat或dog參數 因為他們彼此不能通過"IS-A" 10/25 22:47
: 推 yyc1217:這就是多型的好處 用來處理不知道會傳進什麼物件的情況下 10/25 22:49
: → yyc1217:但你知道傳進來的都是"Animal" 就可以這樣寫 10/25 22:51
: 推 qrtt1:以父類別宣告然後以子類別的建構子new <-- 請搜尋 10/25 23:50
: 推 TsaiCF:多年前我是看侯俊傑老師的多型與虛擬開始對oop有入門感覺的 10/26 01:51
: 推 TsaiCF:(雖然那本是c++).另外要看應用面,可以找design pattern來看 10/26 01:54
: → s66449:yyc1217~請問程式是自己寫的,為什麼會不知道傳入的是dog 10/26 09:59
: → s66449:還是cat? 10/26 10:01
舉個例子 , 如果你要比較 Dog跟Cat Tiger 這三個繼承Animal的成員
要比較 Dog 跟 Cat
那你就要寫 public void compare(Dog d, Cat c);
如果你要比較 Cat跟 Tiger
那你就要寫 public void compare(Tiger t, Cat c);
有多少動物你就要按照組合寫多少次
那還不如底下一次來得省事
public void compare(Animal a,Animal b);
: 推 kasase:假設你的function是比較兩隻傳入動物的年紀 10/26 12:26
--
What do you want to have ? / What do you have?
從書本中,你可以發現我的各種興趣。
從CD中,你可以瞭解我所喜歡的偶像明星。
或許從文字你很難以瞭解一個人,但從物品可以。
My PPolis , My past. http://ppolis.tw/user/Tony
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 221.169.78.140
→
10/26 13:05, , 1F
10/26 13:05, 1F
推
02/29 14:17, , 2F
02/29 14:17, 2F
討論串 (同標題文章)