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

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