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

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 13.抽象類別和介面有什麼不同? [Re:swanky]
swanky

暴走熊

版主

發文: 461
積分: 9
於 2003-08-21 09:18 user profilesend a private message to usersend email to swankyreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
作者: contagious (傳染) 看板: java
標題: [合作翻譯]Java新手 13
時間: Wed Jun 19 00:59:26 2002

13.抽象類別(abstract classes)和介面(interfaces)有什麼不同?
抽象類別和介面是兩個不同的物件導向觀念,用於不同的地方。抽象類別接近於
Abstract Datatype,他宣告了一群類別所共同擁有的一些特性。你可以在抽象類別中宣
告methods 和變數來宣告這些特性。在Java中,抽象類別或者是method會被 'abstract'
這個關鍵字所標示。舉例來說,定義一個抽象類別:Vehicle。

1
2
3
4
public abstract class Vehicle{
    public int wheels;
    public abstract void move();
}


Vehicle這個類別宣告了所有交通工具的共同特性和行為。你可以繼承Vehicle來定義各種
是交通工具但又有別的特性和行為的類別,像是car或是bicycle。Vehicle是一個抽象的
概念,而 car 和 bicycle 則是更精細的將Vehicle的行為做分類,來指出car和bicycle
的特性。

1
2
3
4
5
6
7
8
9
10
11
12
public class Car extends Vehicle{
    public void move(){}
    //Additional behaviour characterise a car
    public void typeOfEngine(){}
    wheels = 4;
}
 
public class Bicycle extends Vehicle{
    public void move(){}
    wheels = 2;
    public void peddelling(){}
}


介面定義了一組協定的行為,讓很多的類別來實做(implement)他。介面定義了一些
methods和一些final static 變數。任何類別,實作了所有這些methods之後,就保證他
會有像這個介面所要求的行為。使用介面可以確保物件之間可以某種方式互相溝通。

下面是個介面的例子:

1
2
3
4
public interface TCPProtocol{
        public void open();
        public void close();
}


在Java中,介面和抽象類別有三個主要的不同點:

1.一個類別可以implemt很多個介面,但只能extends一個父類別。
2.抽象類別可以有一些不是abstract的method,但是介面不能。
3.介面並不屬於類別階層之中。

更多的參考資料:
Writing Abstract Classes and Methods
http://java.sun.com/docs/books/tutorial/java/javaOO/abstract.html
Creating Interfaces
http://java.sun.com/docs/books/tutorial/java/interpack/interfaces.html

13. What are the differences between abstract classes and interfaces?

Abstract classes and interfaces are two different OO concepts and are used
differently. An abstract class is similar to an abstract data type. It defines
characteristics that are common to any of its subclasses or subtypes. You
define characteristics by declaring methods and variables in an abstract
class. For example, define an abstract type, Vehicle. In the Java [tm]
programming language, an abstract class or method is flagged with the keyword,
'abstract'.

1
2
3
4
public abstract class Vehicle{
    public int wheels;
    public abstract void move();
}


The class Vehicle declares behaviours and characteristics that are common to
all vehicles. You can define classes which extend vehicle, that are types of
vehicles but require more behaviours, such as car or bicycle. Class Vehicle is
the abstraction, and car and bicycle add more details to refine the Vehicle
behaviour to characterise a car and bicycle object.

1
2
3
4
5
6
7
8
9
10
11
12
public class Car extends Vehicle{
    public void move(){}
    //Additional behaviour characterise a car
    public void typeOfEngine(){}
    wheels = 4;
}
 
public class Bicycle extends Vehicle{
    public void move(){}
    wheels = 2;
    public void peddelling(){}
}


An interface defines a protocol of behaviour that any class can implement. An
interface defines methods, and final static variables. Any class that
implements all the interfaces' methods guarantees to behave according to the
protocol defined by the interface. Using interfaces ensures that objects can
communicate in certain manners.

Following is an example of an interface:

1
2
3
4
public interface TCPProtocol{
        public void open();
        public void close();
}


In terms of the Java Platform, there are three main differences in abstract
and interface implementation:

1.A class can implement multiple interfaces but only one superclass.
2.Abstract classes can implement non-abstract methods, while interfaces
can not.
3.Interfaces are not part of the class hierarchy.

For more information see
Writing Abstract Classes and Methods
Creating Interfaces


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
66858 [精華] 新手常見問題解答 swanky 26 2003-08-21 09:00
116338 1.java.lang.NoClassDefFoundError swanky 744 2003-08-21 09:02
51087 Re:1.java.lang.NoClassDefFoundError nfrog8108 150 2005-08-25 17:03
87061 11.deprecated是什麼意思? swanky 946 2003-08-21 09:15
62304 Re:11.deprecated是什麼意思? 寒冰 63 2003-12-25 20:01
72554 12.如何取得由Java程式呼叫的外在程式的執行結果? swanky 3459 2003-08-21 09:16
41306 Re:12.如何取得由Java程式呼叫的外在程式的執行結果? psmonkey 1049 2006-03-07 02:43
5041 Re:12.如何取得由Java程式呼叫的外在程式的執行結果? smartdanny 60 2014-08-07 16:02
72784 13.抽象類別和介面有什麼不同? swanky 3680 2003-08-21 09:18
62935 14.如何改變現在的工作目錄? swanky 951 2003-08-21 09:19
63356 15.前置和後置的increment運算子有什麼不同? swanky 1881 2003-08-21 09:20
62714 16.遞移運算子:為什麼 3<<3 和 3<<1 是一樣的? swanky 1117 2003-08-21 09:21
44818 Re:16.遞移運算子:為什麼 3<<3 和 3<<1 是一樣的? 小波 1188 2005-07-21 19:49
85495 17.如何對兩個日期做相減? swanky 1965 2003-08-21 09:22
52233 Re:17.如何對兩個日期做相減? dinos 25 2005-02-15 17:48
62888 18.我可以在哪裡找到Java程式的寫作慣例(coding convetions)? swanky 803 2003-08-21 09:23
65864 19.介面(interface)可以從別的地方繼承任何的行為嗎? swanky 1296 2003-08-21 09:25
65774 20.如何取得記憶體的統計資料(memory statistics)? swanky 1898 2003-08-21 09:26
71080 2. 啟動在 MS Windows 平台上的外部程式 swanky 757 2003-08-21 09:04
8765 Re:2. 啟動在 MS Windows 平台上的外部程式 kevin75116 238 2011-12-06 19:51
22050 Re:9.使用 '==' 運算子和 java.lang.String.equals()的不同 [Re:jason_chan19] viva0322 146 2008-05-05 11:24
77786 3. 下載最新版的 JDK swanky 122 2003-08-21 09:05
66831 4. 設定永久的 classpath swanky 878 2003-08-21 09:06
63404 5. 載入在使用者的 classpath 中所定義的類別 swanky 643 2003-08-21 09:07
65312 6. 拿到 Java 的認證 swanky 337 2003-08-21 09:08
63263 7. Sun 認證網站資源 swanky 339 2003-08-21 09:09
64716 8. 在基本資料型別和 java.lang.String 之間轉換 swanky 448 2003-08-21 09:11
97308 9.使用 '==' 運算子和 java.lang.String.equals()的不同 swanky 3116 2003-08-21 09:12
22151 Re:9.使用 '==' 運算子和 java.lang.String.equals()的不同 viva0322 867 2008-05-05 10:10
21953 Re:9.使用 '==' 運算子和 java.lang.String.equals()的不同 jason_chan19 690 2008-05-05 10:51
73172 10.在Java中是否可以移動/刪除檔案 swanky 1696 2003-08-21 09:14
39200 Re:10.在Java中是否可以移動/刪除檔案 mch 147 2006-06-11 15:01
» JWorld@TW »  Java 新手區

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