Java:Convention / 调用父 class 方法的练习
Java:Convention / practice for calling parent class methods
对于以下代码:
`
Class A
{
method1();
method2();
}
Class B extends A
{
method1();
method3();
}`
在ClassB中,method3实现如下:
method3()
{
this.method1(); // For calling method1 in class B
super.method1(); // For calling method1 in parent class A
// Following statements call method 2 in parent class
method2(); // 1 doesn't seem to be right practice
this.method2; // 2 is more readable in case method2 is overridden in this class
super.method2();// 3 improves readability IMO
}
推荐调用方法 2 的 3 种方法中的哪一种?
长话短说:
用this.
调用方法没用。需要使用 super.
调用方法以避免无限递归。
对于调用方法,this.foo()
和 foo()
都做同样的事情:调用给定方法的最派生版本。 (对于访问成员变量,情况有所不同)。 Java AFAIK 无法调用 "this class' version of a method".
super
通常用在覆盖方法的上下文中,以调用基础 class' 方法的实现。如果您省略 super.
,您最终会得到方法调用自身并且可能会无限递归。如果您在任何其他上下文中使用 super.method()
,您可能已经弄乱了 class 层次结构。
对于以下代码:
`
Class A
{
method1();
method2();
}
Class B extends A
{
method1();
method3();
}`
在ClassB中,method3实现如下:
method3()
{
this.method1(); // For calling method1 in class B
super.method1(); // For calling method1 in parent class A
// Following statements call method 2 in parent class
method2(); // 1 doesn't seem to be right practice
this.method2; // 2 is more readable in case method2 is overridden in this class
super.method2();// 3 improves readability IMO
}
推荐调用方法 2 的 3 种方法中的哪一种?
长话短说:
用this.
调用方法没用。需要使用 super.
调用方法以避免无限递归。
对于调用方法,this.foo()
和 foo()
都做同样的事情:调用给定方法的最派生版本。 (对于访问成员变量,情况有所不同)。 Java AFAIK 无法调用 "this class' version of a method".
super
通常用在覆盖方法的上下文中,以调用基础 class' 方法的实现。如果您省略 super.
,您最终会得到方法调用自身并且可能会无限递归。如果您在任何其他上下文中使用 super.method()
,您可能已经弄乱了 class 层次结构。