JDK1.8新特性--default关键字

 非原创,知识总结性文章

1、default关键字

    在接口中可以通过使用default关键字编写方法体,实现类可以不用实现该方法,可以进行直接调用。

描述

    default是在java8中引入的关键字,也可称为Virtual extension methods——虚拟扩展方法。

是指,在接口内部包含了一些默认的方法实现(也就是接口中可以包含方法体,这打破了Java之前版本对接口的语法限制),从而使得接口在进行扩展的时候,不会破坏与接口相关的实现类代码。

作用

    之前的接口是个双刃剑。

好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需要修改全部实现该接口的类。默认方法使得开发者可以在不破坏二进制兼容性的前提下,往现存接口中添加新的方法,即不强制那些实现了该接口的类也同时实现这个新加的方法。
二进制兼容性:所谓“二进制兼容性”指的就是在升级(也可能是 bug fix)库文件的时候,不必重新编译使用这个库的可执行文件或使用这个库的其他库文件,程序的功能不被破坏。

使用方法

1、继承接口,实现接口

publicinterface Interface1{

    defaultvoid helloWorld() {

        System.out.println("Interface1");

    }

}
public class MyImplement implements Interface1{
    public static void main(String[] args) {
        MyImplement myImplement = new MyImplement();
        //直接调用helloWorld()方法
        myImplement.helloWorld();
    }
}

2、同时实现两个有同名默认方法的接口

public interface Interface2{
    default void helloWorld() {
        System.out.println("Interface2");
    }
}
/**
 * 实现接口Interface1,Interface2
 */
public class MyImplement implements Interface1,Interface2{
    public static void main(String[] args) {
        MyImplement myImplement = new MyImplement();
        //直接调用helloWorld()方法
        myImplement.helloWorld();
    }
}

报错,不知道该调用哪个方法。解决办法:在实现类中重写该方法。

3、类优于接口

public class MyImplement2 extends MyImplement implements Interface2{

    public static void main(String[] args) {
        MyImplement2 myImplement2 = new MyImplement2();
        myImplement2.helloWorld();
    }

}

会调用父类方法。

你可能感兴趣的:(JDK1.8新特性--default关键字)