请解释为什么?找不到任何好的来源
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
答案 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()。