Java接口重写方法

时间:2020-09-23 17:09:35

标签: java interface overriding

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

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

2 个答案:

答案 0 :(得分:2)

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

请参见: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表示特定成员属于类型本身。

答案 1 :(得分:1)

每个实例方法都自动继承到其子类,并且实例方法也只能从其子类中重写。静态方法不能覆盖实例方法。因此,在您的情况下,ABCD中的方法“ default void print_static()”不会覆盖B中的“ static void print_static()”。对于ABCD,您仍然可以调用ABCD.print_static();对于B,您仍然可以调用print_static()。

相关问题