深入分析java8新特性 - 接口默认方法

上一篇文章参考ImportNew,对Java8语言新特性进行了大概分析。这篇文章我们深入分析一下新特性之一:接口的默认方法。
在java8之前,接口中的方法仅仅是一个定义,是没有方法体的。这也是它和抽象类的一个差别。
在java8中,接口中新引入了默认方法。

什么是默认方法?
即方法使用default进行修饰,并且有具体的实现。如下面的Collection接口中的stream()方法。

default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

知道了默认方法的定义后,我们来思考为什么要引入默认方法?
首先接口的好处我们是知道的,接口是一种规范。我们会定义接口,在其中声明一些变量和方法,然后再写一些实现类,“接口+实现”最常见的优势就是实现类和接口分离,在更换实现类的时候,不用更换接口功能。这也是面向对象的一种体现。但接口的缺陷也是很明显的,那就是当我们修改接口时,要修改这接口所有的实现类。这种修改的影响范围很大,对于已经发布的版本修改起来很麻烦,有的也不能随意进行修改。而默认方法就很好的解决了这个问题。默认方法很好的解决接口的修改与现有的实现不兼容的问题。我们在接口中加上默认方法,那他的实现类都会继承该默认方法。

下面举个例子:

public interface Father {
    default void func(){
        System.out.println("Father func");
    }
}
public class Test1 implements Father{
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.func();
    }
}

输出Father func

public interface Son extends Father {
    default void func(){
        System.out.println("Son func");
    }
}
public class Test implements Father,Son{
    public static void main(String[] args){
        new Test().func();
    }
}

输出Son func
这里要注意,如果同时实现父接口和子接口,那实现类中调用子接口和父接口中都有的默认方法时,默认调用的是子接口的默认方法。
如果要调用父接口的默认方法,使用Father.super.func();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值