轉自:http://blog.chinaunix.net/uid-25885064-id-3361989.html
Java語言中允許有一種叫做抽象方法的東西,它只是一個名字沒有具體的實現。例如public abstract void abc(); 使用了abstract關鍵字,結尾用“;”結束。包含一個或多個抽象方法的類稱為抽象類別。抽象類別也必須聲明abstract關鍵字。抽象類別的使用有著一些限制,不能建立抽象類別的執行個體。如果子類實現了抽象方法,則可以建立該子類的執行個體對象。要是子類也不實現的話,這個子類也是抽象類別,也不能建立執行個體。
介面是什麼東西呢?介面是比抽象類別更抽象的類。例如 public interface Name { }介面裡面的方法全都是抽象的,裡面的變數全都是final的常量,而且實現介面的類必須將所有的抽象方法全部實現。抽象類別裡也可以有具體的方法。所以說,介面是最抽象的,其次是抽象類別,而具體類本身就是對現實世界的抽象。軟體開發本身就是將現實世界抽象成電腦世界。
因為抽象類別和介面比具體類抽象,所以使用時它們總是被繼承而被實現的。不過繼承它們的類不只是一個,有很多類實現它們的抽象方法。一個方法有多種實現方式,這裡用到了OOP中的多態性。這使得設計變得非常清晰。因為基類是抽象類別或是介面做一個描述,底下繼承的類有若干個,只需要對介面或抽象類別操作, 也用不著管有多少個實現。如果是多人共同開發的項目的話,是非常有意義的。
介面的實現用關鍵字implement 而不是extends。如果用了extends的那就是繼承這個介面。那麼那個子類也是介面,是原來的子介面。
- //聲明一個介面
- interface Say {
- public void sayMessage();
- }
- //兩個實作類別
- class SayHello implements Say {
- public void sayMessage() {
- System.out.println("hello");
- }
- }
- class SayHi implements Say {
- public void sayMessage() {
- System.out.println("Hi");
- }
- }
- public class TestSay {
- public static void main(String[] args) {
- //同樣都是用Say這個介面類型執行個體,卻可以輸出兩個結果
- Say say = new SayHello();
- say.sayMessage();
- Say say1 = new SayHi();
- say1.sayMessage();
- }
- }
介面還有一個重要的作用,java語言中只有單繼承,就是說只能從一個父類繼承。單繼承的好處是,一旦繼承的太多了,改了一個類,子類就都變了。那麼如果想繼承多個父類的特性怎麼辦呢?就用介面吧,這個類可以先繼承一個類,再去實現其它的介面,介面裡面都是抽象方法,不會造成牽一髮而動全身的效應。改變多繼承的特性,也是對C++語言的一項改進。
業界有一種說法說,與其說java是物件導向編程,還不如說它是面向介面編程。強調的方面是介面的抽象描述性。它也是對C++的一種改進,C++裡面沒有介面。所以說java語言適合多人團隊合作的大項目,看一個介面就可以了,後面怎麼實現的可以不管。