Java8 default关键字介绍

default关键字介绍

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

接口中已经有1个方法 且有一个实现类,如果为接口新增一个方法,这需要修改的实现类,如果新增的方法是由default,则原有的实现类就不需要修改了。

示例

修改前

public interface Interface1 {
    void method1();
}
public class InterfaceImpl1 implements Interface1 {
    @Override
    public void method1() {
        System.out.println("InterfaceImpl1---method1");
    }
}
public class Client {
    public static void main(String[] args) {
        Interface1 s = new InterfaceImpl1();
        s.method1();
    }
}

运行结果

InterfaceImpl1---method1

在Interface1中default修饰的新增方法2

public interface Interface1 {
    void method1();

    default void method2() {
       System.out.println("Interface1---method2");
    }
}

运行Client,结果表明,实现类InterfaceImpl1不需要进行修改。即在已有的接口中添加default修饰的方法,不影响已有的实现类。

InterfaceImpl1---method1

新增实现类InterfaceImpl2

public class InterfaceImpl2 implements Interface1{
    @Override
    public void method1() {
        System.out.println("InterfaceImpl2---method1");

    }

    @Override
    public void method2() {
        System.out.println("InterfaceImpl2---method2");
    }
}

对Client进行修改

public class Client {
    public static void main(String[] args) {
        Interface1 s2 = new InterfaceImpl2();
        s2.method1();
        s2.method2();
    }
}

运行结果

InterfaceImpl2---method1
InterfaceImpl2---method2

新增类

public class Class1 {
    public void method2() {
        System.out.println("Class1---method1");
    }
}

修改实现类2

public class InterfaceImpl2 extends Class1 implements Interface1 {
    @Override
    public void method1() {
        System.out.println("InterfaceImpl2---method1");
    }
}

运行Client

public class Client {
    public static void main(String[] args) {
        Interface1 s2 = new InterfaceImpl2();
        s2.method2();
    }
}

结果说明 类的继承优先于由于接口的实现。

Class1---method2

你可能感兴趣的:(JAVA,java)