编程语言
首页 > 编程语言> > java非静态到静态方法 – 隐藏或覆盖

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