java 介面(翻譯自Java Tutorials)

weixin_34344677發表於2012-12-04

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/04/2802086.html

英文出自 http://docs.oracle.com/javase/tutorial/java/IandI/createinterface.html

軟體工程的許多情況是,不同群組的程式設計師同意一個說明他們的軟體如何互動的”合約”。每個組都應該能夠在寫自己的程式碼時,不需要了解其他組的程式碼如何寫。通常說,介面就是這個合約。

例如,想像未來的社會中,電腦控制的機械機車,無需人工操作,通過城市街道運輸乘客。汽車製造商編寫軟體(Java,當然),經營的汽車停止,啟動,加速,左轉,等等。另一工業組,電子制導工具製造商,使計算機系統接收GPS(全球定位系統)定位資料和無線傳輸的交通條件,並利用這些資訊來驅動汽車。

汽車製造商必須釋出行業標準介面,詳細闡述了有什麼方法可以呼叫使車移動(任何車,任何製造商)。指導製造商可以編寫軟體呼叫介面中描述的方法,驅動汽車。無論是哪個工業組都不需要指導其他組的軟體實現。事實上,每個組只需要考慮,他的軟體高度專有,只要繼續堅持釋出的介面,任何時候都保留修改的許可權。

 

java介面

java程式語言,介面是一個引用型別,類似類,但是介面只能包含常量,方法簽名,巢狀型別。方法沒有方法體。介面不能被例項化—它只能由別其他類實現或者由其他介面繼承。繼承遲點討論。

介面的宣告,類似建立一個新的類:

public interface OperateCar {

   // constant declarations, if any

   // method signatures
   
   // An enum with values RIGHT, LEFT
   int turn(Direction direction,
            double radius,
            double startSpeed,
            double endSpeed);
   int changeLanes(Direction direction,
                   double startSpeed,
                   double endSpeed);
   int signalTurn(Direction direction,
                  boolean signalOn);
   int getRadarFront(double distanceToCar,
                     double speedOfCar);
   int getRadarRear(double distanceToCar,
                    double speedOfCar);
         ......
   // more method signatures
}

 

注意方法簽名沒有大括號,並以分號(;)結尾。

使用介面,必須寫一個類實現介面。當一個可以例項化的類實現介面,它必須為介面宣告的每個方法提供方法體。例如

public class OperateBMW760i implements OperateCar {

    // the OperateCar method signatures, with implementation --
    // for example:
    int signalTurn(Direction direction, boolean signalOn) {
       // code to turn BMW's LEFT turn indicator lights on
       // code to turn BMW's LEFT turn indicator lights off
       // code to turn BMW's RIGHT turn indicator lights on
       // code to turn BMW's RIGHT turn indicator lights off
    }

    // other members, as needed -- for example, helper classes not 
    // visible to clients of the interface
}

在上面的機器人例子,汽車製造商實現介面。Chevrolet的實現顯然不同於Toyota,但是兩個製造商都會遵循一樣的介面。指導製造商是介面的客戶,構建一個使用汽車位置的GPS資料,數字街道地圖,交通資料驅動汽車的系統。做上述事情,指導系統將會呼叫介面方法:turn, change lanes, brake, accelerate等等。

 

API作為介面

機器人汽車例子演示了工業標準應用程式程式設計介面(API)的使用。API是常見的商業軟體產品。一個公司賣軟體包會包含典型的複雜的方法,其他公司會在他們自己的軟體包使用它們,這個是很典型的。一個例子是,數字影象處理方法打包賣給做終端使用者圖形程式的公司。影象處理公司寫自己的類實現介面,釋出給它的客戶。圖形公司通過介面的簽名和返回值呼叫影象處理方法。當影象處理公司的API是public(對於它的客戶),它的API實現是接近嚴格保密的--事實上,它可以修改實現,一直到它繼續實現客戶依賴的介面。

 

介面和多繼承

介面在java程式語言中,有很重要的另一個角色。介面不是類層次的一部分,儘管可以和類聯合工作。java程式語言不允許多繼承,但是介面提供一個替代方案。

java中,類只能繼承一個類,但是它可以實現多個介面。所以,物件可以有多種型別:類本身的型別和實現的介面的所有型別。這意味著如果變數宣告為該介面的型別,它的值也可以引用任何實現了該介面的類的例項化的物件。

相關文章