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()
。
尽管下面两个版本的代码都有效,但我想知道哪个是 "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()
。