方法重写vs抽象方法

时间:2014-08-09 09:34:54

标签: java polymorphism abstract-class method-overriding

我们使用抽象方法在不同场景的不同子类中实现它。

与抽象类Animal一样,它将具有抽象方法makeNoise()。子类DogCat将实现此抽象方法分别打印“bark”和“meow”

但是我想知道它与方法覆盖的不同之处在于我们可以为自己使用自己的方法makeNoise()使用两个类吗?

在这两种情况下,我们实例化两个子类来执行实际任务,然后如何使用抽象方法。

2 个答案:

答案 0 :(得分:4)

抽象方法是一种契约,它强制其直接子类实现所有抽象方法的行为。覆盖是可选的,并不总是子类的必要条件。

抽象方法的效率在于它们强制直接子类提供实现。一般来说,在你不知道所有子类的常见默认实现是什么的情况下,请考虑抽象。

对于你的例子,如果我们不知道大多数动物的常见噪音/声音是什么。我们只知道所有动物都会产生噪音。最好去抽象。如果您知道大多数动物所产生的常见/默认噪音,那么您可以在Animal类中将该实现提供为非抽象,如果需要,如果他们认为它们会产生更好的噪音,它的子类可以覆盖它: - )

答案 1 :(得分:0)

创建一个在其他类中被覆盖的公共方法会破坏抽象类的目的。它们的设计使得它们不能被使用,直到子类扩展抽象类以进一步完成它(覆盖)。

如果你没有制作动物摘要,那么就像所有其他答案一样,你将如何填写其目的?