只有直接子类必须实现方法

时间:2014-09-07 22:16:03

标签: java inheritance

让我们说我正在编写一个动物园模拟器(我在处理继承时最喜欢的例子)。我有一个普通的Animal课程。然后我有两个extend Animal调用Bird的类和另一个调用LandAnimal的类。 Bird的所有子类都将以相同的方式移动(我不打算在我的动物园中使用任何鸵鸟!),同样使用LandAnimal。因此,我在move()类中创建了Animal方法。但鸟类和陆地动物的移动方式却完全不同,以至于我不想在方法中添加任何东西。所以我标记了abstract,忽略了Bird的所有子类都必须实现它的事实。这对我来说似乎并不好,即使代码只是

@Override
public void move()
{
    super.move();
}

在每个文件中都有这种感觉仍然不合适。

主要问题是:我有没有办法让直接子类实现一个方法(Bird必须但Sparrow extends Bird类没有)?

编辑:我忽略了与我的模拟器有关的事情。我宁愿没有3个不同的列表来迭代并在它们上面调用move()。我想有一个ArrayList<Animal>我可以用来更新和绘图。

3 个答案:

答案 0 :(得分:4)

如果您在move()中实施Bird方法并且Sparrow不必更改它,那么您不必在Sparrow中实现它,它将继续按原样需要重新实现它以仅调用super.move();。这就是继承的整个想法:在子类中,你重用了超类中的代码,只有在行为与父类不同的情况下才添加或覆盖方法。

答案 1 :(得分:0)

如果Bird实施了该方法而Sparrow扩展了Bird,那么Sparrow就会有一个实现;它不需要提供另一个。

答案 2 :(得分:0)

是 - 对于abstract方法(和接口方法,它们是相同的),每个类必须实现所有这些,但实现它们的超类计为有效。因此,如果Bird实现抽象move方法,则Sparrow不必,因为其父类已经实现了它。