可以"覆盖抽象方法"替换为"实现抽象方法"在Java继承?

时间:2018-02-02 02:55:02

标签: java inheritance abstract-class method-overriding concreteclass

在Java继承中,表达式"可以覆盖抽象方法"与表达式交替使用"实现抽象方法"?

我在书中找到了以下问题" OCA Java SE 8 Programmer I Study Guide"在第5章,第296页,问题#15:

问:对于具体的子类,以下哪一项是正确的? (选择所有适用的选项)

  • 甲。具体的子类可以声明为abstract。
  • B中。具体的子类必须实现所有继承的抽象方法。
  • ℃。具体的子类必须实现继承接口中定义的所有方法。
  • d。具体的子类不能标记为final。
  • 电子。抽象方法不能被具体的子类覆盖。

我的回答是B& E.但是这本书说,正确的答案只是B. 我的问题具体是关于选项E.书中说,选项E是不正确的,因为抽象方法必须被具体的子类覆盖。我最初的想法是抽象方法必须在被子类覆盖之前实现。为什么选项不正确?

2 个答案:

答案 0 :(得分:1)

抽象方法是一种声明但不包含任何实现的方法。

  • 您可以覆盖抽象类中的抽象和普通方法。
  • 只能声明为final声明的方法。

答案 1 :(得分:1)

让我一次解释一个问题。

:一种。具体的子类可以声明为抽象。

答案:不正确。

根据定义,具体类是can be instantiated和此类can also extends基本抽象类的类。

<强> B中。具体的子类必须实现所有继承的抽象方法。

答案:正确

如果方法在基类中标记为abstracts,则子类扩展基类应确保实现所有抽象方法。 You will otherwise get a compile time error

<强>℃。具体的子类必须实现继承接口中定义的所有方法。

答案:不正确

仅当具体子类具有directly implemented the interface by this class itself时才会出现这种情况。

但是在这种情况下,基类可能已经实现了一个继承的接口.Hence,它的不是必需的用于具体的子类来实现基类中的所有方法,因为继承自界面。

<强> d。具体的子类不能标记为final。

答案:不正确

如果子类被标记为final,则此类不能再被任何其他可用子类扩展。使用final关键字标记类特别用于实现Immutability。

使用Immutable类,我们可以调用访问器方法(例如getter方法),复制对象或传递对象 - 但是没有方法可以允许修改对象的状态。示例:字符串,包装类,如Float,Integer.etc。

<强>电子。抽象方法不能被具体的子类覆盖。

答案:不正确

根据定义,抽象方法是仅被声明但不包含主体或实现的方法。由于我们无法实例化抽象类,因此最多为子类提供这些定义的抽象方法的实现。{{1 }}