一个类实现的多个接口,有相同签名的默认方法
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