【问题标题】:Abstract method in abstract Derived class overrides/implements abstract or concrete method of abstract Base class. How and why?抽象派生类中的抽象方法覆盖/实现抽象基类的抽象或具体方法。如何以及为什么?
【发布时间】:2017-09-26 14:41:26
【问题描述】:

遇到有趣的继承/覆盖问题(取自 here)。

当基类和派生类都是抽象类时,并且

  1. 两者都有完全相同的抽象方法,或者
  2. abstract Base 有具体方法,Derived 声明 SAME 方法抽象。

我不明白为什么 Eclipse IDE 在 Derived 中调用它

  1. 实现(它在 Derived 中不提供代码/正文!)
  2. 覆盖(在 Derived 中也给出了 NO CODE / BODY!)

片段 1:

public abstract class Girl {
     abstract String getDescription();
}


abstract class GirlDecorator extends Girl {
       abstract String getDescription();  // implements Girl.getDescription() - says Eclipse IDE
}

片段 2:

public abstract class Girl {
    String description = "no particular";

      String getDescription() {
          return description;
      }
}

abstract class GirlDecorator extends Girl {
       abstract String getDescription();  // overrides Girl.getDescription() - says Eclipse IDE
}

【问题讨论】:

  • 您忘记了@Override 注释。
  • “Implements”是“overrides”的一个特例,它提供了一个实现。允许用抽象方法覆盖。

标签: java inheritance abstract-class overriding implements


【解决方案1】:

在 Java 中有两种类型的方法(非静态)

  1. Virtual - 普通方法,必须在基类中实现,但可以通过继承覆盖。

  2. 抽象 - 未在基类中但在派生类中实现的方法。

因此包装它,虚拟方法不在派生类中实现,它们在基类中实现并且可以被派生类覆盖。 抽象方法不在基类中实现,而是在派生类中实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 2022-08-18
    • 2013-05-30
    • 2014-06-20
    相关资源
    最近更新 更多