假设我正在编写一个动物园模拟器(处理继承时我最喜欢的例子)。我有一个普通Animal班。然后我有两个类extend Animal调用Bird,另一个类调用LandAnimal. 的所有子类都Bird将以相同的方式移动(我不打算在我的动物园里放任何鸵鸟!),同样的LandAnimal. 因此,我move()在Animal课堂上做了一个方法。但是鸟类和陆地动物的移动方式如此不同,以至于我不想在该方法中添加任何内容。所以我标记它abstract忽略了所有子类Bird都必须实现它的事实。这对我来说似乎并不好,即使代码只是
@Override
public void move()
{
super.move();
}
Run Code Online (Sandbox Code Playgroud)
在每个文件中都有它仍然感觉不对。
主要问题是:有什么方法可以让我只让直接子类实现一个方法(Bird必须但Sparrow extends Bird类没有)?
编辑:我忽略了一些与我的模拟器有关的东西。我宁愿没有 3 个不同的列表来迭代和调用move()它们。我想要一个ArrayList<Animal>我可以用来更新和绘图的。
如果您在 中实现该move()方法Bird并且Sparrow不必更改它,那么您不必在 中实现它Sparrow,它将按原样继承而无需重新实现它以仅调用super.move();. 这就是继承的全部思想:在子类中,您重用来自超类的代码,并且仅在行为与父类不同的情况下添加或覆盖方法。