从父类方法调用子类方法
Posted
技术标签:
【中文标题】从父类方法调用子类方法【英文标题】:Call Child class method from Parent class method 【发布时间】:2017-11-09 21:06:04 【问题描述】:考虑以下情况
class A
X()
//some code
Y();
class B extends A
Y() //some code
如果我创建类B
的对象,并且我尝试使用从A
扩展的函数X
,那么函数X
是否可以访问函数Y
类B
的调用对象。
【问题讨论】:
显而易见的问题:您为什么要这样做?在我看来它像一个 XY 问题 您为什么要这样做?它被认为是让超类调用子类上的方法的反模式。我想你可能想看看抽象类及其方法声明。 【参考方案1】:你可以,但必须满足这一点
-
一个类是抽象的
Y 方法也很抽象
例子:
abstract class A
void X()
Y();
abstract void Y();
class B extends A
@Override
void Y()
System.out.println("Hello from B class");
在这种形式下,每当类 A 调用 Y 时,它实际上会调用抽象方法 Y 的实现方法
【讨论】:
我冒昧地将您的答案链接到我的答案中,因为您的答案已经很好地解释了该解决方案。如果有问题,请不要犹豫;)【参考方案2】:仅当A
具有具有相同签名的方法(或超类具有相同签名),否则它无法找到/使用未在其上下文中定义的方法。
这是可以做到的
带有A
中方法的实现
通过使用A
中的抽象方法(参见ΦXocę 웃 Пepeúpa ツ answer)。
第一个解决方案并不总是最好的,因为你可以有一个在A
中什么都不做的方法,比如:
class A
void Y()
注意:如果您在两个类中都有Y()
,则多态性可以确保B
的实例将使用他自己的实现。
如果您希望能够创建 A
的实例,则第二种解决方案可能会出现问题,因为它将是抽象的。
【讨论】:
以上是关于从父类方法调用子类方法的主要内容,如果未能解决你的问题,请参考以下文章