一个类实现的多个接口,有相同签名的默认方法

2021-02-01  本文已影响0人  djnwzs

方法运行优先级:类或超类->子接口->父接口

本文章程序验证均使用Eclipse软件javaSE-15环境

一、两接口的默认方法各自定义

interface A {
    default void hello() {
        System.out.println("Hello from A");
    }
}
interface B {
    default void hello() {
        System.out.println("Hello from B");
    }
}
public class Demo implements A,B{
    public static void main(String[] args) {
        new Demo().hello();
    }
}

编译报错:
Duplicate default methods named hello with the parameters () and () are inherited from the types B and A
必须覆盖(重写)方法,否则报错。

interface A {
    default void hello() {
        System.out.println("Hello from A");
    }
}
interface B {
    default void hello() {
        System.out.println("Hello from B");
    }
}
public class Demo implements A,B{
    public void hello(){
        A.super.hello(); //如果这里的A改为B,则运行B中的方法
    }
    public static void main(String[] args) {
        new Demo().hello();
    }
}

输出Hello from A

二、接口B继承自接口A

interface A {
    default void hello() {
        System.out.println("Hello from A");
    }
}
interface B extends A {
    default void hello() {
        System.out.println("Hello from B");
    }
}
public class Demo implements A,B{
    public static void main(String[] args) {
        new Demo().hello();
    }
}

优先运行子接口中的方法
输出Hello from B

二、接口B接口C继承自接口A

interface A {
    default void hello() {
        System.out.println("Hello from A");
    }
}
interface B extends A {
    
}
interface C extends A {
   
}
public class Demo implements B,C{
    public static void main(String[] args) {
        new Demo().hello();
    }
}

输出Hello from A

上一篇下一篇

猜你喜欢

热点阅读