【发布时间】:2014-12-14 08:05:58
【问题描述】:
我一直在处理一个涉及代表通用动物的抽象类的任务,该类具有猫、狗、爬行动物等的子类。超类具有每个子类实际上并未使用的抽象方法 . 例如,狗和猫使用了品种和性别的访问器和变异器,但爬行动物类不使用。我个人认为这是一个奇怪的设置,但这是作业所要求的。
起初我尝试省略在特定子类中未使用的抽象方法,但我很快发现这会导致错误,因为抽象方法没有被覆盖。我所要做的就是用适当的方法来解决这个问题......
public class Reptile extends Animal
...
public void setBreed(String newBreed){}
public String getBreed(){return null;}
...虽然看起来有点浪费,因为它们没有被使用。这不是一个大问题,但它让我好奇是否有替代方法可以替代给定子类中未使用的抽象方法。除此之外,当您需要覆盖抽象方法但实际上根本不使用该方法时,是否有任何约定?
【问题讨论】:
-
为什么不为某些 getter 和 setter 提供默认实现?抽象类不需要所有方法都是抽象的。 (尽管这可能不适用于您的具体情况)
-
根据您的使用情况,接口可能更合适。因为您能够实现多个接口来更好地定义您的类。虽然我不确定你的任务是否允许这样做。
-
我不能有一个默认实现,因为分配特别要求我对导致我的帖子的方法使用抽象,尽管这样或接口会更合适。
标签: java inheritance overriding abstract