java非静态到静态方法 – 隐藏或覆盖
作者:互联网
是在一个子类中重新定义一个非静态方法,具有相同的一切,但作为静态覆盖或隐藏它?
http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html说隐藏.但是当我将超类方法声明为final时,我得到一个覆盖错误.
超类声明是
final static void display() { ... }
子类:
void display() { ... }
给出覆盖错误.
解决方法:
Is re-defining a non-static method in a subclass with the same everything but as static overriding or hiding it?
它既不是,因为这样做会触发compilation error,导致程序无效.
class A {
void x();
}
class B extends A {
// ERROR!!!
static void x();
}
当对中的两个方法都是静态方法时,会发生隐藏;当对中的两个方法都是实例方法时,会发生重写.当其中一个是静态方法而另一个是实例方法时,Java认为它是一个错误.实例方法是否为final是无关紧要的;如果静态方法在基类或派生类中也无关紧要:Java无论如何都将其称为错误.
但是,“无法覆盖”的编译器消息具有误导性:我认为“名称冲突”对于这些条件来说是一个更好的名称,因为“覆盖”是为具有两个实例方法的情况保留的.
标签:method-hiding,method-overriding,java 来源: https://codeday.me/bug/20190725/1536655.html