日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Java > 正文

Java教程各種接口的介紹

2019-11-26 16:15:37
字體:
來源:轉載
供稿:網友

Interfaces 接口
在軟件工程中,由一份“契約”規定來自不同的開發小組的軟件之間如何相互作用是非常常見的。每個小組都可以在不知道別的組的代碼的前提下獨立開發自己的代碼。Java中的interface就是這樣的一份“契約”。
舉個例子,假設在未來社會有一種智能汽車,它可以在自動運載旅客而不需要人工操作。汽車生產商開發了軟件(當然是用Java)來控制這種汽車停止,發動,加速,左轉等等。電子導航儀器生產商負責開發接受GPS位置數據和交通狀況無線傳輸的電腦系統,并且應用這些信息來駕駛汽車。
汽車生產商必須公布工業標準interface,該interface需詳細解釋哪些methods可以用于控制汽車運動(該標準適用于任何汽車,任何生產商)。導航系統生產商就可以應用這個interface所介紹的各種methods來控制汽車。任何一個工業廠商都不需了解其他廠商是如何實現他們的軟件的。事實上,只要大家都嚴格遵守所公布的interface,每個廠商對其自己的軟件都有高度所有權,并且保有隨時修改的權利。
在java中的interface
在java編程語言里,一個interface是引用類型(reference),它與class相似,因此只能包含常量(constants),方法簽名(method signatures)和嵌套類型(nested types)。Interface不得含有方法的具體代碼(method body)。 Interface 不可被實例化(instantiated),只能被其它class實現(implemented)或者被其它interface繼承。
定義一個interface與創建一個新類類似:

復制代碼 代碼如下:

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 
}

如想使用上面這個interface,你需要寫一個class來實現它。當一個可被實例化的class實現某個接口時,它需要提供所有該interface所聲明的所有方法(methods)的具體代碼。
在上面的自動化汽車的例子中,汽車生產商即是接口實現者。由雪佛蘭公司的實現方法當然不同于本田公司的方法,但是它們都遵循同一個接口。 導航系統生產商是這個接口的使用者,他們的系統將根據汽車方位的GPS數據,數字化地圖和交通情況來駕駛汽車。因此,這個導航系統將會涉及以下的方法(methods): 轉彎,切道,剎車,加速等等。
API 接口
自動化汽車的例子展示了interface在工業標準應用程序接口(API, Application Programming Interface)中的應用. 在商業軟件中,API也很常見。 通常來說, 一個公司發售的軟件包中會含有其他公司希望應用在自己的產品中的復雜方法(methods)。比如一個包含了數字圖形處理方法的軟件包就可以出售給開發終端客戶圖像軟件的公司。購買后,該公司就可以應用interface所定義的方法。當圖像處理公司向所有客戶公開它的API的同時,這些API的實現方法是高度保密的。事實上,只要保留住原始的interface不被改變,這些API的實現方法很可能在將來被重寫。
Interfaces 和多重繼承
在java編程語言里,interface還有另外一個重要作用。 盡管Interface是與類一起使用的,但它并不是類的層次結構的一部分。java編程語言不支持多重繼承,但是interface提供了替代方案。
在java中,一個類只能繼承于單一的類,但是它可以實現多個接口。因此,對象可以有多重類型:屬于它自身類的類型,和屬于它所繼承的所有接口的類型。這意味著,如果聲明一個變量是某個接口類型,這個變量可以指代任何實現該接口的類的實例。這部分會在“使用接口類型”中詳細討論。
定義一個interface
一個接口的定義是由 修飾詞(modifiers),關鍵詞 interface, 接口名稱,由逗號分隔開的父接口(parent interfaces),和接口實體(interface body)。
例子如下:
復制代碼 代碼如下:

public interface GroupedInterface extends Interface1, Interface2, Interface3 { 
// constant declarations 
// base of natural logarithms 
    double E = 2.718282; 
// method signatures  
    void doSomething (int i, double x); 
    int doSomethingElse(String s); 
}

Public規定了這個接口可以被任何包中的任何類所使用。如果你聲明這個接口是public的,它只能被同一個包里的類所使用。
一個接口可以繼承其它接口,就像一個類能后繼承其它類一樣。但是類只能繼承一個父類,而接口卻可以繼承任何數目的接口。
接口實體(interface body)
接口實體中含有它所包含的所有方法的聲明。每個聲明都以引號為結束,因為接口不用實現它所聲明的方法。接口中所有的方法都默認是public的,因此修飾詞public可以被省略。
接口還可以聲明常量。同樣的,常量的修飾詞public, static和final可以被省略。
接口的實現
為了聲明某個類實現了某個接口,你需要在類的聲明中使用implements。你的類可以實現多個接口,所以implements關鍵詞后面可以跟隨多個由逗號分隔的接口名稱。為了方便,implements關鍵詞多跟在extends關鍵詞的后面。
一個接口實例―Relatable
Relatable是一個用來比較兩個對象大小的接口。
復制代碼 代碼如下:

public interface Relatable { 
    // this (object calling isLargerThan) 
    // and other must be instances of  
    // the same class returns 1, 0, -1  
    // if this is greater // than, equal  
    // to, or less than other 
    public int isLargerThan(Relatable other); 
}

如果你想比較兩個相似的對象的大小,不管該對象屬于什么類,這個類需要實現Relatable接口。
只要有辦法可以比較對象的相對大小,任何類都可以實現Relatable接口。對字符串來說,可以比較字符數;對書來說,可以比較頁數;對學生來說,可以比較體重。對平面幾何對象來說,比較面積是很好的選擇;對三維對象來說,就需要比較體積了。所有以上的類都能實現int isLargerThan()方法。
如果你知道某個類實現了Relatable接口,你可以比較從這個類實例化的對象了。
Relatable接口的實現
下面是一個三角形類,它實現了Relatable接口。
復制代碼 代碼如下:

public class RectanglePlus 
    implements Relatable { 
    public int width = 0; 
    public int height = 0; 
    public Point origin; 
    // four constructors 
    public RectanglePlus() { 
        origin = new Point(0, 0); 
    } 
    public RectanglePlus(Point p) { 
        origin = p; 
    } 
    public RectanglePlus(int w, int h) { 
        origin = new Point(0, 0); 
        width = w; 
        height = h; 
    } 
    public RectanglePlus(Point p, int w, int h) { 
        origin = p; 
        width = w; 
        height = h; 
    } 
    // a method for moving the rectangle 
    public void move(int x, int y) { 
        origin.x = x; 
        origin.y = y; 
    } 
    // a method for computing 
    // the area of the rectangle 
    public int getArea() { 
        return width * height; 
    } 
    // a method required to implement 
    // the Relatable interface 
    public int isLargerThan(Relatable other) { 
        RectanglePlus otherRect  
            = (RectanglePlus)other; 
        if (this.getArea() < otherRect.getArea()) 
            return -1; 
        else if (this.getArea() > otherRect.getArea()) 
            return 1; 
        else
            return 0; 
    } 
}

使用接口類型
在你定義一個新的接口時,你其實在定義一個新的引用類型。在你能使用數據類型名稱的地方,都可以使用接口名稱。如果你定義了一個類型為接口的引用變量,該變量能指向的對象所在的類必須實現了該接口。
下例是一個在一對對象中返回較大對象的方法:
復制代碼 代碼如下:

public Object findLargest(Object object1, Object object2) { 
   Relatable obj1 = (Relatable)object1; 
   Relatable obj2 = (Relatable)object2; 
   if ((obj1).isLargerThan(obj2) > 0) 
      return object1; 
   else
      return object2; 
}

通過把數據類型object1轉換成Relatable,對象obj1可以調用isLargerThan方法。
同理,只要是實現了Relatable的類,也可以使用下面的方法。
復制代碼 代碼如下:

public Object findSmallest(Object object1, Object object2) { 
   Relatable obj1 = (Relatable)object1; 
   Relatable obj2 = (Relatable)object2; 
   if ((obj1).isLargerThan(obj2) < 0) 
      return object1; 
   else
      return object2; 

public boolean isEqual(Object object1, Object object2) { 
   Relatable obj1 = (Relatable)object1; 
   Relatable obj2 = (Relatable)object2; 
   if ( (obj1).isLargerThan(obj2) == 0) 
      return true; 
   else
      return false; 
}

這些方法適用于任何“Relatable”的類,而無關它們的繼承關系。實現了Relatable的類,它們既屬于自身(或者父類)的類型,也屬于Relatable類型。這使得它們具有了多重繼承的優點,因為它們可以同時具備父類和接口的行為。
重寫接口
假設你開發了一個接口名為DoIt:
復制代碼 代碼如下:

public interface DoIt { 
   void doSomething(int i, double x); 
   int doSomethingElse(String s); 
}

然后,你想加入一個新的方法在這個接口里,因此代碼變成:
復制代碼 代碼如下:

public interface DoIt { 
   void doSomething(int i, double x); 
   int doSomethingElse(String s); 
   boolean didItWork(int i, double x, String s); 
}

如果你這么修改了,所有實現了舊的DoIt接口的類都會出錯,因為它們不再正確的實現這個接口。所有使用這個接口的程序員會嚴重抗議你的修改。
你需要預估你的接口用戶的需求,并從開始就完善的設計好這個接口。但是這常常是無法做到的。另一個解決方法就是再寫一個接口。例如,你可以寫一個DoItPlus的接口繼承原有的接口。

復制代碼 代碼如下:

public interface DoItPlus extends DoIt { 
   boolean didItWork(int i, double x, String s); 
}

現在你的用戶可以選擇繼續使用舊接口DoIt,或是升級的新接口DoItPlus。
總結
接口就是兩個對象間的溝通協議。
一個接口的聲明包含一些方法的簽名(signatures),但不需要實現它們;也可能含有一些常量。
實現某接口的類必須實現該接口所聲明的所有的方法。
在任何使用類型名稱的地方都可以使用接口的名字。
英文原文;Oracle,編譯:@philhu

幾招防范Java漏洞
Java異常處理
經過糟糕一年后,Java正沿著正確方向發展
Java枚舉的七種常見用法
選擇Java還是.NET

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
久久中文免费视频| 国产视频一区三区| 日韩欧美在线网站| 国产日韩av高清| 狠狠色综合色区| 日韩国产专区| 欧美天堂一区二区| 在线观看av的网站| 精品久久香蕉国产线看观看gif| 99综合精品久久| 亚洲成av人片| 中文精品视频| 最近高清中文在线字幕在线观看| 欧美日韩国产在线看| 免费一级欧美在线观看视频| 亚洲免费专区| 久久99精品久久久久婷婷| 亚洲高清在线观看一区| 999精品网| 91久久中文| 欧美亚洲免费高清在线观看| 欧美日韩精品免费| 国产第一页在线播放| 国产三级视频在线| 亚洲永久字幕| 日韩精品视频免费播放| 在线欧美日韩国产| 国产91欧美| 在线视频第一页| 日韩国产欧美三级| 久久久精品欧美| 久久99精品国产| 国产日韩精品久久久| 日韩专区中文字幕| 中文字幕久久av| 午夜伦欧美伦电影理论片| 欧美日韩在线看| 午夜一区二区视频| 1区2区3区在线视频| 国产真实乱子伦精品视频| 日韩视频不卡中文| 中文字幕在线精品| av免费在线播放| 日韩免费看网站| 欧美日韩亚洲一| 蜜桃视频一日韩欧美专区| 久久riav| 国产日韩在线视频| 日韩精品在线第一页| 日韩精品一级| 91午夜在线| 久久av免费| 日韩欧美中文视频| 精品久久久91| 黄色精品在线观看| 亚洲第一视频在线观看| 国产导航在线| 日韩欧美在线网站| 欧美日韩中文字幕一区| 欧美久久一二三四区| 日韩在线观看精品| 久久99久久久久久久噜噜| 久久精品在线观看| 中文 欧美 日韩| 日韩精品―中文字幕| 国产99在线 | 亚洲| 久久久久久欧美| 精品日韩在线观看| 一区二区三区四区五区视频在线观看| 亚洲一区中文在线| 99视频一区| 国产不卡在线观看视频| 精品精品久久| 精品三级av| 中文字幕伊人| 欧美日韩国产专区| 国产欧美日韩中文| 日韩精品在线看| 久久精品在线免费观看| 婷婷中文字幕在线观看| 国产在线观看a| а√天堂8资源中文在线| 欧美日中文字幕| 中文字幕中文字幕精品| 日韩av一区二区在线| 中文字幕欧美日韩精品| 一级特黄大欧美久久久| 久久视频一区| 91精品国产综合久久久蜜臀粉嫩| 韩日中文字幕第一页| 亚洲免费精品视频| 国产三级第一页| 亚洲小说春色综合另类电影| 一本一道综合狠狠老| 九九精品调教| 日韩在线中文视频| 国产在线视频不卡| 刘玥91精选国产在线观看| 日韩在线观看一区| 免费一级欧美在线观看视频 | 中文字幕国产在线| 亚洲欧美日本另类| 国产黄色在线免费观看| 91精品国产亚洲| 日韩精品综合在线| 亚洲免费专区| 亚洲福利在线看| 国产黄色在线观看| 欧美日韩国产综合久久 | 日韩欧美国产午夜精品| 国产一级免费看| 男人的天堂网av| 69堂精品视频在线播放| 亚洲国产福利视频| 中文字幕亚洲字幕| 天天在线视频色| 偷窥国产亚洲免费视频| 国产欧美日韩久久| 欧美日韩第一区日日骚| 久久精品蜜桃| www.三级.com| av丝袜在线| 91精品综合久久久久久| 欧美日韩激情一区二区三区| 一区二区精品免费| 日韩欧美中文视频| 精品日韩一区二区三区免费视频| 欧美日韩国产一区在线| 欧美三级视频在线| 日韩精品国产欧美| 欧美一级日韩不卡播放免费| 精品播放一区二区| 日韩欧美中文免费| 首页国产欧美久久| 亚洲视频在线观看三级| 韩国一区二区av| 久久久精品福利| 中文在线视频| 国产劲爆久久| 91久久久久| 亚洲欧洲日韩在线| 欧美sm一区| 亚洲乱码在线观看| 一级片免费网站| 日韩欧美中文字幕一区| 红桃视频亚洲| 精品中文字幕在线| 日韩精品视频中文在线观看| 欧美日韩国产免费| 日韩av一区二区在线| 日韩中文字幕精品视频| 欧美成人vr18sexvr| 日韩高清不卡一区| 国产黄色在线| 91xxx在线观看| 91精品免费观看| 国产精品一区二区三区免费观看| 国产三级视频网站| 亚洲 欧美 精品| a天堂在线资源| 亚洲第一视频网站| 精品国产网站在线观看| 国产午夜精品一区二区三区视频| 精品在线网站观看| 久久精品不卡| 九色蝌蚪视频在线| 免费精品国产自产拍观看| 精品无人国产偷自产在线| 中文在线а√在线8| 日韩中文字幕| 日韩欧美在线视频| 国产日韩中文字幕在线| 国产一级片播放| 日韩精品在线观看视频| 国产在线www| 国产视频一区三区| 日韩国产亚洲欧美| 日韩欧美中文字幕在线播放| 欧美国产日韩在线播放| 欧美日韩国产亚洲一区| 中文字幕精品视频在线| 高清国产一区| 国产最新在线| 中文字幕 亚洲一区| 国产黄色在线看| 精品在线一区二区| 精品视频国产| 久久精品网站免费观看| 91日韩中文字幕| 中文字幕日韩第一页| 欧美日韩国产一级片| 99精品人妻国产毛片| 国产区高清在线| 日韩国产91| 中文字幕亚洲欧美| 日韩欧美一级在线播放| 欧美日韩中文| 午夜一区二区三区视频| 欧美日韩亚洲一| 一区二区三区精品99久久| 三级精品视频| 国产伦精品免费视频| 不卡一二三区| 中文字幕亚洲二区| 欧美日韩国产专区| 精品一二三四区| 精品一区二区三区中文字幕| 91xxx在线观看| 欧美三级日韩三级| 国产专区中文字幕| 伊人www22综合色| 日韩在线观看视频一区二区| 日韩中文字幕在线观看视频| 亚洲免费婷婷| 日韩精品综合在线| 欧美日韩国产免费观看视频| 欧美日韩第一| 白嫩少妇丰满一区二区| 亚洲一区精品在线| 中文字幕欧美人妻精品一区蜜臀| 影音先锋一区二区资源站| 国产欧美日韩在线| 天天摸日日摸狠狠添| 欧美日韩国产一二三| 一区二区日韩免费看| 99在线国产| av影视在线看| 伊人精品视频| 日韩在线一区二区视频| 精品乱子伦一区二区| 日韩精品一区二区三区视频播放| 91精品国产亚洲| 日韩精品丝袜在线| 国产日韩中文字幕在线| 日韩欧美在线综合| 91久久久久久久久| 久久99精品国产| 日本亚洲欧美天堂免费| 日韩精品在线免费观看| 久久精品免费看| 国产成人精品免费久久久久| 蜜桃久久av| 日本中文字幕在线观看| 亚洲视频一二三四| 欧美中文字幕精品| 国产乱国产乱老熟300部视频| 欧美日韩在线播放三区四区| 欧美国产一级片| 成人一区二区不卡免费| 91精品国产日韩91久久久久久| 一区二区三区在线播放欧美| 欧美日韩国产一二| 久久夜色精品国产欧美乱极品| 欧美日韩综合在线免费观看| 成人精品视频一区| 日韩免费不卡avV| 99在线精品视频免费观看20| 日本黄色一区二区三区| 欧美乱大交xxxxx免费| 蜜桃久久av| 欧美日韩国产大片| 免费精品国产自产拍观看| 欧美日韩综合在线观看| 日韩 欧美 综合| 欧美日韩在线观看一区| 香蕉精品久久| 国产精久久久久| 欧美日韩高清不卡| av手机天堂| 美女黄a一级视频| 国产成人精品av久久| 久久精品久久精品亚洲人| 亚洲日本精品视频| 日本亚洲视频在线| 亚洲视频电影在线| 天天综合天天添夜夜添狠狠添| 国产日韩中文字幕| 国产成人精品综合久久久| wwwav91com| 日韩欧美国产成人一区二区| 日韩国产欧美在线视频| 91日韩欧美| 国产 中文 字幕 日韩 在线| 亚洲第一福利视频在线| 97久久精品午夜一区二区| 在线中文字幕网站| 国产99精品| 日韩精品视频在线| 日韩精品视频网| 国产成人精品三级| 免费一级欧美在线观看视频| 日韩视频在线免费播放| 国产 日韩 欧美 综合| www日韩在线观看| 中文字幕在线国产| 国产成人精品综合网站| 日韩手机在线观看视频| 国产欧美日韩在线| 丰满少妇一区| 国产黄色在线| 中文字幕亚洲二区| 国产免费电影网站入口| 日韩欧美一级精品久久| 亚洲乱码中文字幕综合| 日韩美女中文字幕| 国产专区中文字幕| 亚洲综合在线中文字幕| 欧美日韩在线观看一区| 久本草在线中文字幕亚洲欧美| 91精品国产日韩91久久久久久| 中文在线视频观看| 亚洲福利精品视频| 国产日韩精品久久久| 91精品蜜臀在线一区尤物| 91精品国产综合久久香蕉最新版| 精品国产31久久久久久| 欧美日韩中文在线| 1024国产在线| 亚洲福利在线观看| 久久精品日韩无码| 欧美日韩国产一区中文午夜| 亚洲欧美中文在线视频| 日韩欧美中文字幕精品| 日韩久久精品视频| 99pao成人国产永久免费视频| 日韩在线一区二区| 亚洲福利视频在线| 日韩国产欧美| 日韩专区中文字幕| 日韩久久久精品| 午夜黄色小视频| 久久香蕉一区| 国产欧亚日韩视频| 中文精品在线观看| 欧美一级免费在线观看| 亚洲免费视频一区| 日韩欧美成人一区二区三区| 日韩在线三区| 亚洲国产欧美日韩在线| 中文字幕 亚洲一区| 中文字幕在线中文字幕二区| 91精品国产综合久久福利 | 日韩区欧美区| √新版天堂资源在线资源| 国产黄色在线观看| 亚洲一区在线观看视频| 日韩欧美一卡二卡| 一区二区国产在线| 日韩欧美在线网站| 国产三级免费观看| 欧美日韩精品欧美日韩精品| 久久在线91| 亚洲欧洲三级| 在线国产99| 精品国产欧美| 在线观看免费国产成人软件| 亚洲图片小说综合| 91精品电影| 欧美日韩高清一区二区| 日韩欧美国产综合| 国产95在线|亚洲| 精品免费视频| 亚洲中午字幕| 欧美亚洲国产日韩| www.中文字幕在线| 二区中文字幕| 91精品啪在线观看国产60岁| 亚洲国内精品视频| 欧美日韩高清在线一区| 亚洲国产福利视频| 中文字幕精品视频在线| 中文字幕狠狠干| 日韩网站中文字幕| 日韩欧美国产成人精品免费| 国产又粗又猛又爽又黄91精品| 日韩在线中文| 欧美日韩免费高清| 午夜精品一区二区三区视频免费看| 91精品国产色综合久久久蜜香臀 | 91欧美在线视频| 日韩一级免费在线观看| 99国产成 人 综合 亚洲欧美| 欧美不卡视频一区| 亚洲黄页一区| 久久精品夜夜夜夜久久| 日韩欧美中文免费| 精品国产91乱高清在线观看| 最近中文字幕第一页| 午夜伊人狠狠久久| 欧美日韩国产观看视频| 国产小视频免费在线网址| 在线一区二区不卡| 国产一级片播放| 色综合天天综合网天天狠天天| 国产不卡一区二区在线观看| 国产在线观看91| 一区二区三区在线播放欧美 | 视频一区二区不卡| 日韩在线中文| 91精品国产综合久久精品|