JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區 » Object/物件導向  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [實力測試]什麼是多型? [精華]
BruceHsu





發文: 182
積分: 3
於 2003-09-12 21:35 user profilesend a private message to usersend email to BruceHsureply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
首先,我先說明一下:這篇文章只是我想測試自己實力所寫的,如果有錯誤,煩請各位先進不吝指教!謝謝!

多型(polymorphism),是物件導向的三大要素之一(另外兩個是繼承封裝)。
多型大多是使用介面(Interface)或是使用抽象(abstract)的類別(class)或函數(method,或稱方法)來實現。

什麼是多型呢?簡單來說,是一個類別(或介面),設定了一些資料及函數(沒有實做),而由其他類別所繼承,並且在該類別實做。

舉個例子來說,我們現在假設除了我們這個世界之外還許多平行宇宙,裡面的人、事、物都跟我們這邊一樣,但是本身而言是不一樣的。這些宇宙中的browser本身都是browser,有著browser的臉、browser的身體、browser的腦袋,我們可以說browser本身是一個介面。但是,繼承這個介面的類別裡將這些東西所實做的不一樣,例如這個宇宙的browser的腦袋被實做成是喜愛Java的工程師,而在另一個宇宙則是被實做成喜愛C#.net的傢伙,而在另一個宇宙,是被實做成大明星。(見example1.java)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import java.lang.*;
 
  public class example1 {
    public static void main(String start[]){
    browser tW = new thisWorld();
    browser tW1 = new thatWorld1();  
    browser tW2 = new thatWorld2();
    tW.mind();
    tW1.mind();
    tW2.mind();
    System.exit(0);
    }
    
  }
  
    interface browser {
    public void mind();  
  
  } 
    
    
  class thisWorld implements browser {
    public void mind() {
    System.out.println("這個時空中(thisWorld),browser是個熱愛Java的工程師");  
    }
 
}
 
  class thatWorld1 implements browser {
    public void mind() {
    System.out.println("這個時空中(thatWorld1),browser是個擁護C#.net的邪惡工程師");  
    }
 
}
    class thatWorld2 implements browser {
    public void mind() {
    System.out.println("這個時空中(thatWorld2),browser是個大明星");  
    }
 
}


多型有什麼好處呢?例如:Java中的I/O APIs,裡頭的OutputStream便是一個典範,OutputStream的子類別都擁有OutputStream的函數,但是實做出來的卻不同,像是FileOutputStream將write()函數設定為可以寫入File的函數,而ZipOutputStream則是可以寫入Zip壓縮檔案。也就是說,多型可以讓處理同一類資料的類別擁有相同的函數,但是每個類別所實做出來的相同函數的功能不一定相同。

備註:根據Duncan先進的說明,其實IO APIs不止用到多型,還用到了Decorator pattern,詳細細節請見底下Duncan先進的說明。

如果想要讓你的子類別擁有相同的函數(包含相同的功能)的話,要使用類別繼承,而不是繼承介面。


BruceHsu edited on 2003-09-13 19:43
reply to postreply to post
http://brucehsu.twbbs.org/
索尼小站個版: BruceHsu
虛心受教,用心學習!
話題樹型展開
人氣 標題 作者 字數 發文時間
64926 [精華] [實力測試]什麼是多型? BruceHsu 1745 2003-09-12 21:35
61594 Re:[實力測試]什麼是多型? swanky 20 2003-09-12 21:48
61371 Re:[實力測試]什麼是多型? BruceHsu 82 2003-09-12 21:57
61710 Re:[實力測試]什麼是多型? Duncan 2568 2003-09-12 22:56
57131 Re:[實力測試]什麼是多型? 183 2004-12-26 02:09
57033 Re:[實力測試]什麼是多型? leonz 13 2004-12-26 04:23
57524 Re:[實力測試]什麼是多型? caterpillar 325 2004-12-26 23:36
56489 Re:[實力測試]什麼是多型? roycliu 195 2005-01-08 15:38
51822 Re:[實力測試]什麼是多型? ylam 32 2005-07-04 22:21
51755 Re:[實力測試]什麼是多型? caterpillar 144 2005-07-05 18:43
51694 Re:[實力測試]什麼是多型? alien 784 2005-07-05 19:06
51667 Re:[實力測試]什麼是多型? caterpillar 1297 2005-07-05 20:32
51679 Re:[實力測試]什麼是多型? alien 1401 2005-07-06 01:23
10890 Re:[實力測試]什麼是多型? sample33 201 2015-09-22 07:31
51574 Re:[實力測試]什麼是多型? caterpillar 495 2005-07-05 20:42
51747 Re:[實力測試]什麼是多型? Duncan 258 2005-07-05 21:58
51406 Re:[實力測試]什麼是多型? ylam 218 2005-07-06 21:50
51410 Re:[實力測試]什麼是多型? Lan2 191 2005-07-06 21:57
51350 Re:[實力測試]什麼是多型? alien 286 2005-07-07 19:57
51742 Re:[實力測試]什麼是多型? ylam 9 2005-07-07 20:28
51335 Re:[實力測試]什麼是多型? alien 138 2005-07-08 00:05
51253 Re:[實力測試]什麼是多型? ylam 97 2005-07-08 17:20
51217 Re:[實力測試]什麼是多型? alien 269 2005-07-08 22:23
51248 Re:[實力測試]什麼是多型? Lan2 23 2005-07-08 19:31
61176 Re:[實力測試]什麼是多型? Duncan 481 2003-09-12 21:54
60945 Re:[實力測試]什麼是多型? BruceHsu 254 2003-09-12 21:55
60890 Re:[實力測試]什麼是多型? BruceHsu 239 2003-09-12 21:56
51168 Re:[實力測試]什麼是多型? ylam 20 2005-07-09 09:44
51100 Re:[實力測試]什麼是多型? alien 122 2005-07-10 00:05
51194 Re:[實力測試]什麼是多型? lkkll 175 2005-07-09 14:50
51096 Re:[實力測試]什麼是多型? alien 366 2005-07-10 00:46
51106 Re:[實力測試]什麼是多型? lkkll 52 2005-07-10 14:23
50973 Re:[實力測試]什麼是多型? lkkll 260 2005-07-10 14:39
50995 Re:[實力測試]什麼是多型? lkkll 220 2005-07-10 14:52
50659 Re:[實力測試]什麼是多型? caterpillar 464 2005-07-10 16:35
50957 Re:[實力測試]什麼是多型? lkkll 201 2005-07-10 15:35
50667 Re:[實力測試]什麼是多型? caterpillar 40 2005-07-10 16:21
50590 Re:[實力測試]什麼是多型? lkkll 54 2005-07-10 16:39
50419 Re:[實力測試]什麼是多型? caterpillar 127 2005-07-10 19:13
50372 Re:[實力測試]什麼是多型? lkkll 31 2005-07-10 21:23
60809 Re:[實力測試]什麼是多型? BruceHsu 43 2003-09-12 22:53
60983 Re:[實力測試]什麼是多型? Duncan 568 2003-09-12 23:06
60811 Re:[實力測試]什麼是多型? BruceHsu 567 2003-09-12 23:08
50424 Re:[實力測試]什麼是多型? caterpillar 74 2005-07-10 21:30
50373 Re:[實力測試]什麼是多型? lkkll 43 2005-07-10 22:45
50388 Re:[實力測試]什麼是多型? caterpillar 476 2005-07-10 22:57
50459 Re:[實力測試]什麼是多型? alien 668 2005-07-10 23:42
50390 Re:[實力測試]什麼是多型? caterpillar 165 2005-07-10 23:54
50366 Re:[實力測試]什麼是多型? alien 161 2005-07-11 00:02
50291 Re:[實力測試]什麼是多型? ylam 76 2005-07-12 20:07
50131 Re:[實力測試]什麼是多型? alien 117 2005-07-14 22:20
49461 Re:[實力測試]什麼是多型? fwen 72 2005-08-10 02:29
49981 Re:[實力測試]什麼是多型? alien 169 2005-08-10 09:59
62860 Re:[實力測試]什麼是多型? T55555 416 2003-09-13 00:30
60928 Re:[實力測試]什麼是多型? Yoshi 416 2003-09-13 00:41
60858 Re:[實力測試]什麼是多型? Duncan 789 2003-09-13 01:48
60718 Re:[實力測試]什麼是多型? caterpillar 0 2003-09-13 01:35
61625 Re:[實力測試]什麼是多型? Duncan 2583 2003-09-14 01:16
56180 Re:[實力測試]什麼是多型? 湯瑪士小火車 359 2005-01-07 15:37
61531 Re:[實力測試]什麼是多型? T55555 1346 2003-09-13 02:17
61016 Re:[實力測試]什麼是多型? Duncan 1680 2003-09-13 02:30
60854 Re:[實力測試]什麼是多型? Yoshi 1140 2003-09-13 02:47
60928 Re:[實力測試]什麼是多型? Duncan 1677 2003-09-13 02:59
60247 Re:[實力測試]什麼是多型? yysun 242 2004-02-06 08:08
60206 Re:[實力測試]什麼是多型? psmonkey 489 2004-02-06 19:15
60267 Re:[實力測試]什麼是多型? yysun 66 2004-02-06 19:42
57674 Re:[實力測試]什麼是多型? doris 333 2004-12-16 22:06
» JWorld@TW »  Java 新手區 » Object/物件導向

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8