Java8 default关键字介绍

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Java8 default关键字介绍的主要内容,如果未能解决你的问题,请参考以下文章

Java权限修饰符(包括Java8 default介绍)

Java8 default关键字

default关键字用法

JAVA8

编程 | Java8函数式编程入门

JAVA8新特性