Posted on 2007-06-15 19:35
停留的風 閱讀(7175)
評論(0) 編輯 收藏
一.類與接口的區別
類:描述了一個實體,包括實體的狀態,也包括實體可能發出的動作。
接口:定義了一個實體可能發出的動作。但是只是定義了這些動作的原型,沒有實現,也沒有任何狀態信息。
1.接口與類區別:
(1)接口有點象一個規范、一個協議,是一個抽象的概念;
(2)而類則是實現了這個協議,滿足了這個規范的具體實體,是一個具體的概念。
(3)從程序角度,簡單理解,接口就是函數聲明,類就是函數實現。需要注意的是同一個聲明可能有很多種實現。
2.接口與抽象類的區別:
(1)A class can implement any number of interfaces but can subclass at most one abstract class.
(2)An abstract class can have nonabstract methods, which are usually instance of the TEMPLATE METHOD pattern. All the methods of an interface are abstract,
whether or not this declaration is explicit.
(3)An abstract class can declare instance variable that its subclass inherit. An interface cannot declare instance variables, although it can establish static final fields.
(4)An abstract class can define constructors, an interface cannot.
(5)An abstract class can have methods whose visibility is protected, private, or none(package);every method in an interface must be public.
(6)An abstract class inherits form Object, including such method as clone() and equals().
二. 接口的用處主要體現在下面幾個方面:
(1)通過接口可以實現不相關類的相同行為,而不需要了解對象所對應的類。
(2)通過接口可以指明多個類需要實現的方法。
(3)通過接口可以了解對象的交互界面,而不需了解對象所對應的類。
三.一些接口的疑問:
1、從書中看到的是java程序的接口中只定義了常量及空方法,空的方法有什么用呢,還要在類中寫方法體,那還要接口干什么。
答:接口中定義類方法的原型,但是不能說是空方法,因為空方法的意思是有實現體,只不過實現體是空操作。實際上接口沒有定義任何實現體。具體的實現體都是在實現接口的類中,接口只是定義了這些方法的調用方式。
你當然也可以不用接口,直接在類里面寫方法,但是如果你的一組方法需要在很多類里實現,那么把它們抽象出來,做成一個接口規范,不是更好么?
2、一個程序中寫了2個接口,并在同一個類中寫方法體,這與多繼承有什么關系。
答:一個類描述了一個實體,這個實體可能是一個復雜的對象,它的動作很多,如果把這些動作分類,用接口a定義其中的某一組動作,接口b定義其中的另外一組動作,這樣的結構,比較清楚。
這種方式具備了多繼承的優點,避免了多繼承的缺陷。實際上在歷史上,接口在很大程度上,是為了解決多繼承帶來的種種問題而設計出來的。
3、包中那些已定義的接口,怎么知道那里面定義了什么方法。
答:接口里定義了方法的輸入輸出,這些都是協議,具體的實現都在每個類中。對于很多只需要抽象接口的地方,不需要知道具體的類是什么,只要這個類實現了這個接口就可以了。