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

时间:2015-04-14 00:00:24

标签: java class super

即使以下两个版本的代码都有效,我也想知道哪一个是"更正确" /"标准"方法和原因。感谢。

版本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 个答案:

答案 0 :(得分:2)

他们"更正确" /"标准",两种方法调用具有完全不同的含义,因为他们调用不同的方法:

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

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

同样,如果您想调用父级的类实现,请使用method()来调用给定范围中定义的method() super.method()(即使method() }是子类中的覆盖。)

答案 1 :(得分:0)

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

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

如果您未覆盖您的子类中的静态method(),则通常会调用父类'如上所述,只需使用method()或明确使用OtherClass.method()的方法。您不需要使用super.为呼叫添加前缀。

如果覆盖您子类中的静态method(),那么从method()中调用SomeClass.method()SomeClass将具有相同的内容调用SomeClass中定义的静态方法的效果 如果你想要调用父类'由于你的子类覆盖它而隐藏的静态方法,你可以调用super.method()(如果你在重写它的直接子类中),或者再次明确它并使用{{1} }。