ary*_*axt 11 java inheritance class extend
public class BaseClass {
public void start() {
// do something
}
}
public class ClassA extends BaseClass {
}
ClassA c = new ClassA();
c.start();
Run Code Online (Sandbox Code Playgroud)
在下面的代码中,我想使用在超类中定义的start()方法,我在很多其他开发人员的代码中看到他们覆盖了超类中的方法,然后他们调用了super.这是有原因的吗?
public class ClassA extends BaseClass {
@Override
public void start() {
super.start();
}
}
Run Code Online (Sandbox Code Playgroud)
Jea*_*sky 11
明晰?一些开发人员认为在子类中显示该方法更为清晰.我不同意.这是多余的信息.
至少从Java 5开始,您可以添加@Override,以便编译器告诉您签名是否更改/消失.
除了构造函数.对于构造函数,您确实必须使用相同的签名创建自己的签名并向上委派.在这种情况下,省略不等同于.
public class ClassA extends BaseClass {
@Override
public void start() {
super.start();
}
}
Run Code Online (Sandbox Code Playgroud)
完全相同的事情,就像这样完全没有压倒一切
public class ClassA extends BaseClass {}
所以,除非你有一些额外的功能要添加(在这种情况下你调用超类的方法,然后添加你的额外逻辑)或做一些不同的事情(你不要调用超类的方法,只是定义一些不同的逻辑),最好你不要覆盖超类的方法(并调用超类的方法)因为它没有意义.