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

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

请参阅:https://www.tutorialspoint.com/default-method-vs-static-method-in-an-interface-in-java#:~:text=您%20不能%20覆盖%20静态,静态(%20方法%20的%20类。

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

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

最新更新