有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java类和java类的区别是什么。超级的方法和类。方法

尽管下面两个版本的代码都有效,但我想知道哪一个是“更正确的”/“标准的”方法,以及为什么。谢谢

第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()

非常感谢


共 (2) 个答案

  1. # 1 楼答案

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

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

    如果没有覆盖子类中的静态method(),则通常只使用method()调用父类的方法,或者显式地使用OtherClass.method(),如上所述。您不需要在通话前加上super.

    如果正在重写子类中的静态method(),那么从SomeClass中调用method()SomeClass.method()将具有调用SomeClass中定义的静态方法的相同效果
    如果您确实希望调用父类的静态方法,该方法由于子类重写而被隐藏,那么您可以调用super.method()(如果您在重写它的直接子类中),或者再次显式地使用OtherClass.method()

  2. # 2 楼答案

    它们不是“更正确”/“标准”,两种方法调用的含义完全不同,因为它们调用不同的方法:

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

    SomeClass.super.method();调用OtherClass的方法method()

    类似地,如果要调用父类实现(即使method()在子类中被重写),也可以使用method()调用给定范围中定义的method()