Java8新特性 - 虚拟扩展方法

接口的封装和可重用性是接口的主要优点。但接口的缺点是实现接口的类必须实现所有接口方法。有时只需要接口的部分方法,但在实现接口时必须提供所有接口方法的方法实现。虚拟扩展方法解决了这个问题。

虚拟扩展方法是接口中具有默认实现的方法。如果实现类不提供方法的实现,则使用默认的实现。实现类可以重写默认实现,或提供新的默认实现。

虚拟扩展方法添加配置来扩展接口的功能,而不会破坏已实现接口较早版本的类的向后兼容性。虚拟扩展方法中的默认实现是用 default 关键字提供的。由于虚拟扩展方法提供默认实现,因此不能是抽象方法。

Java8中的许多接口都提供了默认的实现方法,如java.util.Map:
这里写图片描述

java.util.List:
这里写图片描述

如下代码清单定义了一个具有默认实现的接口Animal,并定义了两个接口实现类Bird和Pig,其中Bird未重新实现接口中的方法name(),而Pig中重新实现了接口中的方法name():

interface Animal{
    void eat();
    void sleep();
    default void name(){
        System.out.println("I do not want to tell you.");
    }
}

class Bird implements Animal{

    @Override
    public void eat() {
        System.out.println("Bird is eating.");
    }

    @Override
    public void sleep() {
        System.out.println("Bird is sleeping.");
    }

}

class Pig implements Animal{

    @Override
    public void eat() {
        System.out.println("Pig is eating.");
    }

    @Override
    public void sleep() {
        System.out.println("Pig is sleeping.");
    }

    @Override
    public void name() {
        System.out.println("My name is pig.");
    }
}

public class VirtualImpl {

    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.eat();
        bird.sleep();
        bird.name();

        System.out.println();

        Pig pig = new Pig();
        pig.eat();
        pig.sleep();
        pig.name();
    }

}

代码运行结果如下图所有:
这里写图片描述

总结:虚拟接口扩展方法为接口内的函数提供了默认实现,这使得开发者可以更专注于接口中需要的函数和业务需求。该方法类似于抽像类,因为抽像类可以为函数提供默认实现。但是使用接口更符合现代编程的要求:面向接口编程。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值