class.super.method 和 class.method 有什么区别?

What is the difference between class.super.method and class.method?

尽管下面两个版本的代码都有效,但我想知道哪个是 "more correct"/"standard" 方法以及为什么。谢谢。

版本 1:

public class SomeClass extends OtherClass{

    public boolean someMethod() {
        ActionListener s = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                SomeClass.super.method();
            }
        };
    }
}

版本 2:

public class SomeClass extends OtherClass{

    public boolean someMethod() {
        ActionListener s = new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                SomeClass.method();
            }
        };
    }
}

换句话说...

SomeClass.method();SomeClass.super.method();

同理,什么时候用method(),什么时候用super.method()

非常感谢。

它们不是"more correct"/"standard",这两种方法调用的含义完全不同,因为它们调用的方法不同:

SomeClass.method();调用 SomeClass 的方法 method() (并且 method() 必须声明为静态才能工作)

SomeClass.super.method(); 调用 OtherClass.

的方法 method()

类似地,使用method()调用给定范围内定义的method()super.method()如果你想调用父级的class实现(即使method() 在 subclass).

中被覆盖

您代码中的 method() 似乎是 OtherClass 上的静态方法。

一般来说,为了让阅读您代码的任何人清楚地知道您正在对象层次结构中的 class 上调用静态方法,您可以在调用前加上 class'名称:OtherClass.method()(如 this answer 中所述)

如果您不覆盖子class中的静态method(),通常调用父class'如上所述,只需使用 method() 或显式使用 OtherClass.method() 即可。您不需要在调用前加上 super..

如果您覆盖子class中的静态method(),则从内部调用method()SomeClass.method()您的 SomeClass 将具有调用 SomeClass.
中定义的静态方法的相同效果 如果您 do 想调用一个父 class' 静态方法,但由于您的 subclass 覆盖了它而被隐藏,您可以调用 super.method() (如果你在覆盖它的直接子 class 中),或者再次明确它并使用 OtherClass.method()