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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值