【发布时间】:2015-06-22 02:10:06
【问题描述】:
在我的项目中,我有一个包含几个抽象方法的抽象类。现在多个其他类扩展了该抽象类。并非所有类都想覆盖抽象类的所有方法,因为这对他们没有用。如何在对类没有用的子类中提供这些方法的默认实现? 示例-:
public abstract class Animal
{
public void Action()
{
.....
this.roar();
}
public abstract void roar();
public abstract void run();
}
上面是抽象类,它将具有子类将实现的抽象方法。
public class Lion extends Animal
{
@Override
public void roar()
{
s.o.p("Lion roars");
}
@Override
public void run()
{
s.o.p("Lion runs");
}
}
public class Deer extends Animal
{
@Override
public void roar()
{
// Question : What should I do here?
}
@Override
public void run()
{
s.o.p("Deer runs");
}
}
编辑-:
感谢您的建议,我理解拥有另一个类的想法,该类可以具有不常见的方法(在这种情况下为“咆哮”)。但是我的项目结构有点不同,它有点像遗留代码,其中有许多子类从动物类扩展。子类调用一个具体方法,该方法又调用抽象方法(在本例中为“roar”,请参阅更新后的 Animal 类和具体方法“Action”)。 现在正如你所建议的,如果我创建另一个抽象类
public abstract RoaringAnimal extends Animal
{
public abstract void roar();
}
这将解决其中一个问题,因为我现在可以扩展 RoaringAnimal,而不是如果 Animal 但其他调用 Animal.Action 方法的类,他们不会在 Animal 中找到 roar() 的实现,javac 会抱怨。
【问题讨论】:
-
有实现它们的基类吗?
-
顺便说一句,并不是所有的动物都奔跑。
move()可能是更合适的方法名称。 -
查看复合模式,它们有点棘手,但我认为它们更适合这样的应用程序。
标签: java interface overriding abstract-class multiple-inheritance