【Java8】default关键字

1. 前言

Java8允许接口(Interface)出现方法体,前提是该方法必须由default关键字修饰。

好处是,在接口的实现类中不用实现接口的所有方法,可以按需实现方法,减少代码冗余。

2. 示例

2.1 接口中不用实现的方法

代码如下:

package com.practice;

public class DefaultTest {
    public static void main(String[] args) {
        DefaultFirst firstClass = new DefaultFirst();
        firstClass.sayHi();
    }
}

class DefaultFirst implements InterfaceFirst {

}

interface InterfaceFirst {
    default void sayHi() {
        System.out.println("I am InterfaceFirst.");
    }
}

InterfaceFirst接口定义一个包含方法体的方法sayHi()

DefaultFirst类实现InterfaceFirst接口,却不用实现sayHi()方法,直接便能调用。

Java8之前,接口中的所有方法,在接口实现类中是必须全部实现的。而Java8中的deafult关键字,则彻底颠覆该概念。

2.2 接口default方法冲突

如果两个接口包含一个方法名一致的default方法,被一个类同时实现时,会出现Duplicate default methods编译错误。

解决办法则是在实现类中重写该方法。

代码如下:

package com.practice;

public class DefaultTest {
    public static void main(String[] args) {
        DefaultFirst firstClass = new DefaultFirst();
        firstClass.sayHi();
    }
}

class DefaultFirst implements InterfaceFirst, InterfaceSecond {
    @Override
    public void sayHi() {
        System.out.println("I am DefaultFirst.");
    }
}

interface InterfaceFirst {
    default void sayHi() {
        System.out.println("I am InterfaceFirst.");
    }
}

interface InterfaceSecond {
    default void sayHi() {
        System.out.println("I am InterfaceSecond.");
    }
}

3. 类优先接口

如果继承的父类和接口方法名一致,则优先执行父类的方法。

参考代码:

package com.practice;

public class DefaultTest {
    public static void main(String[] args) {
        DefaultSecond secondClass = new DefaultSecond();
        secondClass.sayHi();
    }
}

interface InterfaceFirst {
    default void sayHi() {
        System.out.println("I am InterfaceFirst.");
    }
}

class DefaultSupper {
    public void sayHi() {
        System.out.println("I am DefaultSuper.");
    }
}

class DefaultSecond extends DefaultSupper implements InterfaceFirst {

}

执行结果:I am DefaultSuper.


参考:
  1. https://blog.csdn.net/qq_35835624/article/details/80196932

文章作者: 叶遮沉阳
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叶遮沉阳 !
  目录