java8基礎系列:Interface(接口)

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關鍵字實現

  • default-A
package basic.datatype.eightnewfeature;

public interface InterfaceDefaultTest {
    default void outputInfosDefault(){
        System.out.println("Default method1");
    }
    public void outputInfosPublic();
    
}
  • default-B
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章