在以下示例中,来电FirstChildclass first; first.someMethod();
将与SecondChildclass second; second.someMethod();
相同。或者我错了吗?
class Superclass {
public void someMethod() {
//do something
}
}
class FirstChildclass extends Superclass {
@Override
public void someMethod() {
super.someMethod();
}
public void someOtherMethod() {
//do something else
}
}
class SecondChildclass extends Superclass {
public void someOtherMethod() {
//do something else
}
}
有没有理由像FirstChildclass
那样实现它?因为我在FistChildclass
中看到了许多实现,我想知道为什么有人会这样做。
答案 0 :(得分:3)
如果您询问以下区别:
@Override
public returnType someName() {
return super.someName();
}
而不是覆盖它。这样做没有任何区别,没有任何意义。
如果您想扩展原始方法,请致电super.someName()
。
小心!如果您有想要在儿童课程中使用的构造函数,但您不需要任何其他行为,则可以调用super(arguments)
答案 1 :(得分:2)
这是关于你的设计。覆盖意味着您想要更改从父级继承的现有实现。 如果你没有做任何不同的事情,那么你就不想做
@Override
public void someMethod() {
super.someMethod();
}
那没用。
@Override
public void someMethod() {
// do some other logic
super.someMethod();
// do some other logic
}
这完全没问题:)因为你正在做一些除了父实现之外的任务。