抽象派生类中的抽象方法覆盖/实现抽象基类的抽象或具体方法。如何以及为啥?
Posted
技术标签:
【中文标题】抽象派生类中的抽象方法覆盖/实现抽象基类的抽象或具体方法。如何以及为啥?【英文标题】: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)。
当基类和派生类都是抽象类时,并且
-
两者都有完全相同的抽象方法,或者
abstract Base 有具体方法,Derived 声明 SAME 方法抽象。
我不明白为什么 Eclipse IDE 在 Derived 中调用它
-
实现(它在 Derived 中不提供代码/正文!)
覆盖(在 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”的一个特例,它提供了一个实现。允许用抽象方法覆盖。
【参考方案1】:
在 Java 中有两种类型的方法(非静态)
Virtual - 普通方法,必须在基类中实现,但可以通过继承覆盖。
抽象 - 未在基类中但在派生类中实现的方法。
因此包装它,虚拟方法不在派生类中实现,它们在基类中实现并且可以被派生类覆盖。 抽象方法不在基类中实现,而是在派生类中实现。
【讨论】:
以上是关于抽象派生类中的抽象方法覆盖/实现抽象基类的抽象或具体方法。如何以及为啥?的主要内容,如果未能解决你的问题,请参考以下文章