1 Inteface
1.0 特點
序號 |
特點 |
1 |
接口中所有成員變量默認爲public static final |
2 |
接口中所有方法默認爲抽象方法 |
3 |
接口中沒有構造方法,構造方法用於創建對象 |
4 |
實現接口的類中必須重新實現接口中定義的所有抽象方法,default不是必須 |
5 |
多個無關類可以實現同一個接口,一個類可以實現多個無關的接口 |
6 |
接口與實現類間存在多態性,多態:同一個接口,使用不同的實例執行不同的操作,即同一個方法,不同的代碼邏輯 |
1.2 作用
序號 |
作用 |
描述 |
1 |
有利於代碼規範 |
定義明確的業務實現方法,防止開發人員隨意命名 |
2 |
有利於代碼維護 |
功能在接口裏,統一實現,利於維護 |
3 |
保證代碼安全和嚴密 |
高耦合低內聚,接口裏不涉及任何方法的實現細節,這樣較安全和嚴密 |
1.2 使用接口的原因
序號 |
原因 |
描述 |
1 |
代碼簡潔 |
將具體的功能定義在接口中,實現時統一使用接口中的方法名,實現不同的功能 |
2 |
接口實現多樣(多態性),維護成本低 |
一個接口的方法,可以有不同的實現,因爲在接口中只定義抽象方法,不涉及實現 |
3 |
降低耦合性 |
方法統一在接口中定義,不同類可以實現統一方法的不同功能 |
2 Java8新特性
2.1 單default關鍵字實現
接口中方法的默認屬性,接口的實現中無需Override實現該方法.
package basic.datatype.eightnewfeature;
public interface InterfaceDefaultTest {
default void outputInfosDefault(){
System.out.println("Default method1");
}
public void outputInfosPublic();
}
package basic.datatype.eightnewfeature.impl;
import basic.datatype.eightnewfeature.InterfaceDefaultTest;
public class InterfaceImplementsTest implements InterfaceDefaultTest {
@Override
public void outputInfosPublic(){
System.out.println("Public method");
}
public static void main(String[] args){
InterfaceDefaultTest interfaceTest = new InterfaceImplementsTest();
interfaceTest.outputInfosDefault();
interfaceTest.outputInfosPublic();
}
}
- 注意
使用defalult關鍵字的方法,在接口中可以直接實現功能,此時的方法不是抽象方法,在接口實現中可以不進行重寫.
default不在實現類中override僅限於單個default且default名稱不同時.
2.2 多default關鍵字實現
package basic.datatype.eightnewfeature;
public interface InterfaceDefaultTest {
default void outputInfosDefault(){
System.out.println("Default method1");
}
public void outputInfosPublic();
}
package basic.datatype.eightnewfeature;
public interface InterfaceDefaultTestAnother {
default void outputInfosDefault(){
System.out.println("Default method Another");
}
public void outputInfosAnother();
}
package basic.datatype.eightnewfeature.impl;
import basic.datatype.eightnewfeature.InterfaceDefaultTest;
import basic.datatype.eightnewfeature.InterfaceDefaultTestAnother;
public class InterfaceImplementsTest implements InterfaceDefaultTest,InterfaceDefaultTestAnother {
@Override
public void outputInfosPublic(){
System.out.println("Public method");
}
@Override
public void outputInfosDefault(){
System.out.println("Default method override");
}
@Override
public void outputInfosAnother(){
System.out.println("Public method anoter");
}
public static void main(String[] args){
InterfaceDefaultTest interfaceTest = new InterfaceImplementsTest();
interfaceTest.outputInfosDefault();
interfaceTest.outputInfosPublic();
}
}
- 注意
在多個接口中,有相同的default方法,並且同時實現兩個接口時,必須重寫default方法.
3 小結
- default是否重寫,是有條件的
- 若實現的多個接口中default方法名沒有重名的,無需重新實現
- 若實現的多個接口中default方法名有重名的,必須重新實現default方法
- default方法可以有body,在接口中可以直接實現該方法
【參考文獻】
[1]https://blog.csdn.net/qq_35835624/article/details/80196932
[2]https://www.cnblogs.com/LionheartCGJ/p/8466352.html
[3]https://blog.csdn.net/qq_43345641/article/details/90006399
[4]https://zhidao.baidu.com/question/85287325.html
[5]https://blog.csdn.net/liuyishan1993/article/details/79368181
[6]https://www.runoob.com/java/java-polymorphism.html