首页 > 解决方案 > Java接口覆盖方法

问题描述

请解释为什么?找不到好的来源

interface ABCD {
    default void print() {}
    static void print_static() {}
}

interface B extends ABCD{
    static void print() {}//error, why?
    default void print_static() {}//fine, why?
}

答:@AdolisPali 因为默认方法 print 是从 ABCD 继承的,所以它也在接口 B 中。而且您不能在该接口中拥有具有相同名称和参数的静态方法 – fps

标签: javainterfaceoverriding

解决方案


不能覆盖接口的静态方法;您可以使用接口名称访问它们。如果你试图通过在实现接口中定义类似的方法来覆盖接口的静态方法,它将被视为另一种方法。

看到这个:https ://www.tutorialspoint.com/default-method-vs-static-method-in-an-interface-in-java#:~:text=You%20cannot%20override%20the%20static,static ) %20method%20of%20the%20class。

本质上,在 Java 中,关键字 static 表示特定成员属于类型本身。


推荐阅读