鍍金池/ 教程/ Java/ Java接口繼承
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對(duì)象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問(wèn)級(jí)別
Java對(duì)象克隆
Java初始化塊
Java可變長(zhǎng)度參數(shù)
Java接口字段
Java對(duì)象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計(jì)
Java對(duì)象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實(shí)例化
Java內(nèi)部類類型
Java對(duì)象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問(wèn)級(jí)別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語(yǔ)句的用法)

Java接口繼承

接口可以從另一個(gè)接口繼承。與類不同,接口可以繼承多個(gè)接口。如下代碼所示 -

interface Singer {
  void sing();
  void setRate(double rate);
  double getRate();
}
interface Writer {
  void write();
  void setRate(double rate);
  double getRate();
}
interface Player {
  void play();
  void setRate(double rate);
  default double getRate() {
    return 300.0;
  }
}

一個(gè)接口使用關(guān)鍵字extends來(lái)繼承自其他接口。 關(guān)鍵字extends之后是以逗號(hào)分隔的繼承接口名稱列表。繼承的接口稱為超級(jí)接口,繼承接口的接口稱為子接口。

接口繼承其超級(jí)接口的以下成員:

  • 抽象和默認(rèn)方法
  • 常量字段
  • 嵌套類型

接口不從其超級(jí)接口繼承靜態(tài)方法。接口可以重寫它從其超級(jí)接口繼承的繼承的抽象和默認(rèn)方法。如果超級(jí)接口和子接口具有相同名稱的字段和嵌套類型,則子接口會(huì)覆蓋父接口對(duì)應(yīng)字段。

interface A {
  String s = "A";
}
interface B extends A {
  String s = "B";
}
public class Main {
  public static void main(String[] argv){
    System.out.println(B.s);
  }
}

以下代碼顯示如何覆蓋父接口的默認(rèn)方法。

interface A {
  default String getValue(){
    return "A-Interface";
  }
}
interface B extends A {
  default String getValue(){
    return "B-Interface";
  }
}

class MyClass implements B{
}

public class Main {
  public static void main(String[] argv){
    System.out.println(new MyClass().getValue());
  }
}

上面的代碼生成以下結(jié)果。

B-Interface

繼承沖突實(shí)現(xiàn)

引入默認(rèn)方法使得類可以從其超類和超級(jí)接口繼承沖突的實(shí)現(xiàn)。Java使用三個(gè)簡(jiǎn)單的規(guī)則為了解決沖突。如下 -

  1. 總是以超接口的為準(zhǔn)
  2. 最具體的以超接口為準(zhǔn)
  3. 類必須覆蓋沖突的方法

instanceof運(yùn)算符

可以使用instanceof運(yùn)算符來(lái)評(píng)估計(jì)算引用類型變量是指特定類的對(duì)象,還是其類實(shí)現(xiàn)特定接口。instanceof運(yùn)算符的一般語(yǔ)法是 -

referenceVariable instanceof  ReferenceType

參考以下實(shí)現(xiàn)代碼 -

interface A {//  ww  w. j  a  va 2  s.  co  m
  default String getValue(){
    return "A";
  }
}
interface B {
  default String getValue(){
    return "B";
  }
}

class MyClass implements B,A{
  public String getValue(){
    return "B";
  }
}

public class Main {
  public static void main(String[] argv){
    MyClass myClass = new MyClass();
    System.out.println(myClass instanceof MyClass);
    System.out.println(myClass instanceof A);
    System.out.println(myClass instanceof B);
  }
}

上面的代碼生成以下結(jié)果。

true
true
true

上一篇:Java抽象類和方法下一篇:Java枚舉體