java非静态到静态方法 - 隐藏或覆盖

ash*_*ley 3 java overriding method-hiding

是在一个子类中重新定义一个非静态方法,具有相同的一切,但作为静态覆盖或隐藏它?

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html说隐藏.但是当我将超类方法声明为final时,我得到一个覆盖错误.

超类声明是

final static void display() { ... }
Run Code Online (Sandbox Code Playgroud)

子类:

void display() { ... }
Run Code Online (Sandbox Code Playgroud)

给出覆盖错误.

das*_*ght 5

是在一个子类中重新定义一个非静态方法,它具有相同的一切,但是作为静态覆盖或隐藏它?

它既不是,因为这样做会触发编译错误,导致程序无效.

class A {
    void x();
}
class B extends A {
    // ERROR!!!
    static void x();
}
Run Code Online (Sandbox Code Playgroud)

当对中的两个方法都是静态方法时,会发生隐藏; 当对中的两个方法都是实例方法时,会发生重写.当其中一个是静态方法而另一个是实例方法时,Java认为它是一个错误.实例方法是否为final是无关紧要的; 如果静态方法在基类或派生类中也无关紧要:Java无论如何都将其称为错误.

但是,"无法覆盖"的编译器消息具有误导性:我认为"名称冲突"对于这些条件来说是一个更好的名称,因为"覆盖"是为具有两个实例方法的情况保留的.