JDK1.8接口的默认实现

很多时候,别人问我接口和类的区别的时候,我都会回答接口里面只能有抽象方法,而不能够有具体方法,但是今天看Mybatis源码的时候,发现了有一段代码是判断接口里面的默认方法的,于是我发现原来对接口的认识太过于肤浅了。

JDK1.8之后,在接口里面可以定义default方法,default方法里面是可以具备方法体的,当子类实现该接口之后,不需要重写该方法即可以调用该方法。

ok,看看代码

//定义一个接口 里面有一个默认方法
public interface Face {
    default String get(){
        return "123";
    }
}

//定义一个实现类,空类
public class FaceImp implements Face {
}

//写一个测试类
public class Main {
    public static void main(String[] args) {
        Face face=new FaceImp();
        System.out.println(face.get());
    }
}

测试结果:
123

我们可以看到,实现类可以直接继承父接口的默认方法,这个默认实现子类也是可以重写的。

现在抽象类和接口就更像了,那么我们来看看现在接口和抽象类的区别:

  1. 抽象类只能单继承,接口可以多现实
  2. 抽象类中可以用private、protected方法,接口不可以用

那么在接口中加入default方法有什么好处呢?

  1. 对于一些公有的方法,直接使用默认的方法,就不用在实现类中写重复代码了。
  2. 可以对代码零入侵的加入一些新的方法
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值