调用超级方法与不实现之间有区别吗?

时间:2016-10-04 12:33:18

标签: java inheritance

在以下示例中,来电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中看到了许多实现,我想知道为什么有人会这样做。

2 个答案:

答案 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
}

这完全没问题:)因为你正在做一些除了父实现之外的任务。