【发布时间】:2014-09-07 22:16:03
【问题描述】:
假设我正在编写一个动物园模拟器(处理继承时我最喜欢的例子)。我有一个普通的Animal 类。然后我有两个类,extend Animal 称为Bird,另一个类称为LandAnimal。 Bird 的所有子类都将以相同的方式移动(我不打算在我的动物园里养鸵鸟!),LandAnimal 也是如此。因此,我在Animal 类中做了一个move() 方法。但是鸟类和陆地动物的移动方式如此不同,以至于我不想在该方法中添加任何内容。所以我将它标记为abstract,忽略了Bird 的所有子类都必须实现它的事实。这对我来说似乎不太好,即使代码只是
@Override
public void move()
{
super.move();
}
在每个文件中都包含它仍然感觉不对。
主要问题是:有什么办法让我只 direct 子类实现一个方法(Bird 必须,但 Sparrow extends Bird 类没有)?
编辑:我忽略了一些与我的模拟器有关的东西。我宁愿没有 3 个不同的列表来迭代并在它们上调用 move()。我想要一个ArrayList<Animal> 可以用来更新和绘图。
【问题讨论】:
-
是的;只在
Bird中实现它。 -
如果您在
Bird中实现move()方法,那么子类可以选择再次覆盖它,但不必这样做。你的说法是不正确的。
标签: java inheritance