Java : Override not needed methods inside classes - Update

标签 java interface overriding abstract-class multiple-inheritance

<分区>

在我的项目中,我有一个包含几个抽象方法的抽象类。现在多个其他类扩展了该抽象类。并不是所有的类都想重写抽象类的所有方法,因为那对它们没有用。我如何在对类无用的子类中提供这些方法的默认实现? 示例-:

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");
   }
}

编辑-:

感谢您的建议,我理解拥有另一个类的想法,该类可以具有不常见的方法(在这种情况下为“咆哮”)。但是我的项目结构有点不同,它有点遗留代码,其中有许多子类从 Animal 类扩展。子类调用具体方法,具体方法又调用抽象方法(本例中为“roar”,请参阅更新后的 Animal 类,具体方法为“Action”)。 现在按照你的建议,如果我创建另一个抽象类

public abstract RoaringAnimal extends Animal
{
    public abstract void roar();
}

这将解决其中一个问题,因为我现在可以扩展 RoaringAnimal 而不是 Animal 而其他调用 Animal.Action 方法的类,它们不会在 Animal 中找到 roar() 的实现并且 javac 会提示。

最佳答案

如果你有一个适合子类但不适合父类(super class)的方法,比如这里的roar方法,那么你可能想提供另一个抽象类来继承Animal 但提供 roar,比如 RoaringAnimalroar() 方法将不再在 Animal 中声明,而是在 RoaringAnimal 中声明。

public abstract class RoaringAnimal extends Animal
{
    public abstract void roar();
}

那么你可以让 Deer 扩展 Animal,而不是实现 roar(),但是你可以让 Lion扩展 RoaringAnimal,实现 roar()

关于Java : Override not needed methods inside classes - Update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29661686/

相关文章:

java - JSP 上的 2 个请求第二个删除变量内容

c# - 为什么核心类型只实现了部分接口(interface)?

c# - 如何动态确定类型是否是使用反射的接口(interface)?

html - 覆盖 span 和 b 元素的宽度

firefox - ExtJs5 - 覆盖 ext-all-debug.js 中定义的 native 方法

java - 如何在 Netbeans-Ubuntu 中使用 OpenCV for Java

Java 枚举和 valueOf 反序列化

java - 在 Reactor 2.0 中处理 Stream 过滤器的正确方法是什么?

c# - 使用显式接口(interface)来确保针对接口(interface)进行编程

java - 在 eclipse-Java 中重写 hashCode()