<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    中文JAVA技術平等自由協作創造

    Java專題文章博客和開源

    常用鏈接

    統計

    最新評論

    java中接口之間的繼承

      最近在讀一些源碼的時候突然發現了一個很神奇的東西,它的原始形態是這樣的:
      在這行代碼中,BlockingDeque、BlockingQueue和Deque是三個接口。剛發現這個問題時,我是十分吃驚的,因為即使在《Thinking in Java》中也沒有提到接口之間的繼承。所以我立即把這個疑問提交到了stackoverflow上面。
      正如在stackoverflow上面所討論的一樣,一個類只能extends一個父類,但可以implements多個接口。java通過使用接口的概念來取代C++中多繼承。與此同時,一個接口則可以同時extends多個接口,卻不能implements任何接口。因而,Java中的接口是支持多繼承的。
      然后我又做了個實驗,來驗證如果多個父子接口中有多個相同的方法聲明,然后在實現這個最終的接口的時候,相同的方法聲明在實現的時候會不會有沖突呢?
      首先寫了個接口:TestInterfaceA.java:
      1 package com.peter.java.dsa.interfaces;
      2
      3 public interface TestInterfaceA {
      4 String pri_key = "guess what the private key is";
      5
      6 int add(int x, int y);
      7
      8 String encryt(byte[] result);
      9
      10 int get();
      11 }
      注意,里面聲明了三個方法和一個變量;
      然后再與了一個接口:TestInterfaceB.java:
      1 package com.peter.java.dsa.interfaces;
      2
      3 public interface TestInterfaceB {
      4 String pub_key = "guess what the public key is";
      5
      6 int minus(int x, int y);
      7
      8 byte[] decryt(String src);
      9
      10 int get();
      11 }
      里面也聲明了三個方法和一個變量;
      然后再定義了一個接口InterfaceMultiInheritance.java同時繼承了接口TestInterfaceA.java和接口TestInterfaceB.java:
      1 package com.peter.java.dsa.interfaces;
      2
      3 public interface InterfaceMultiInheritance extends TestInterfaceA,
      4 TestInterfaceB {
      5 int num = 1024;
      6
      7 double divide(int x, int y);
      8
      9 int get();
      10 }
      里面聲明了兩個方法和一個變量;
      注意,在這三個接口中,有一個共同的方法聲明:get()。這個都是要討論的主題。
      最后在一個類InterfaceImplementTest.java中實現了接口InterfaceMultiInheritance.java,源碼如下:
      1 package com.peter.java.dsa.common;
      2
      3 import com.peter.java.dsa.interfaces.InterfaceMultiInheritance;
      4 import com.sun.org.apache.xml.internal.security.exceptions.Base64DecodingException;
      5 import com.sun.org.apache.xml.internal.security.utils.Base64;
      6
      7 public class InterfaceImplementTest implements InterfaceMultiInheritance {
      8
      9 @Override
      10 public int add(int x, int y) {
      11 // TODO Auto-generated method stub
      12 return x + y;
      13 }
      14
      15 @Override
      16 public String encryt(byte[] result) {
      17 // TODO Auto-generated method stub
      18 return Base64.encode(result);
      19 }
      20
      21 @Override
      22 public int minus(int x, int y) {
      23 // TODO Auto-generated method stub
      24 return x - y;
      25 }
      26
      27 @Override
      28 public byte[] decryt(String src) {

      29 // TODO Auto-generated method stub
      30 try {
      31 return Base64.decode(src);
      32 } catch (Base64DecodingException e) {
      33 // TODO Auto-generated catch block
      34 e.printStackTrace();
      35 }
      36 return null;
      37 }
      38
      39 @Override
      40 public double divide(int x, int y) {
      41 // TODO Auto-generated method stub
      42 return x/y;
      43 }
      44
      45 @Override
      46 public int get() {
      47 // TODO Auto-generated method stub
      48 return num;
      49 }
      50
      51 public void print() {
      52 System.out.println("The public key is: "+pub_key+"\nThe private key is: "+pri_key);
      53 }
      54
      55 }
      在這個類中,只有一個get方法實現了,同時也沒有為有多個get要實現而沖突。同時,如果刪除了接口InterfaceMultiInheritance.java中的get方法,也只有一個get方法得到了實現并且沒有為多個get要實現而出現什么沖突。
      所以,我們可以得到一個結論,當編譯器在實現接口的時候會依然檢查接口InterfaceMultiInheritance.java、TestInterfaceA.java和TestInterfaceB.java中的方法聲明,如果后兩者有與前者相沖突的方法聲明,編譯器將只要求類實現前者的聲明,而后兩者中相同的方法聲明將自動被忽略。而當只有后兩者中有相同的方法聲明時,編譯器將實現其中的一個即可。就好像是編譯器中有一個專門存儲方法聲明的Set一樣,在有繼承關系的接口中,只保存一次相同的方法聲明 www.jx-jf.com

    posted on 2014-03-23 09:49 好不容易 閱讀(219) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    PK10開獎 PK10開獎
    主站蜘蛛池模板: 亚洲偷自精品三十六区| 日本亚洲色大成网站www久久| 一个人看的www视频免费在线观看| 毛片a级毛片免费播放100| 久久久久亚洲精品天堂| 国产一区二区三区免费观看在线| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 羞羞视频免费观看| 日韩免费电影在线观看| 亚洲啪AV永久无码精品放毛片| 成人毛片18岁女人毛片免费看| 亚洲欧美成人综合久久久| 天天干在线免费视频| 亚洲av永久中文无码精品| 国产a级特黄的片子视频免费| 国产精品久久久久久亚洲小说| 成人毛片免费观看视频| 亚洲A∨精品一区二区三区下载| 国产成人涩涩涩视频在线观看免费 | 国产成人A人亚洲精品无码| 亚洲国产午夜中文字幕精品黄网站 | 亚洲熟妇AV一区二区三区宅男| 免费黄色网址入口| 精品无码专区亚洲| 亚洲精品和日本精品| 三上悠亚电影全集免费| 亚洲亚洲人成综合网络| 日韩在线不卡免费视频一区| 亚洲网站在线播放| 成年性羞羞视频免费观看无限| 亚洲a∨无码精品色午夜| AV在线亚洲男人的天堂| 久久精品国产免费一区| 亚洲精品91在线| 午夜a级成人免费毛片| 四虎永久在线精品免费一区二区| 最新精品亚洲成a人在线观看| 97无码人妻福利免费公开在线视频| 久久精品国产亚洲AV无码娇色| 无码一区二区三区AV免费| 国产精品久久久久久亚洲小说|