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