gpt4 book ai didi

java - 在父类(super class)的所有子类上调用方法?

转载 作者:行者123 更新时间:2023-12-01 07:26:12 25 4
gpt4 key购买 nike

我最近偶然发现了一些一直让我烦恼的事情。

每当我想要在具有特定接口(interface)的所有类中调用一个方法时,或者如果它们是扩展,我希望有一个与关键字 super 相反的关键字。基本上,我希望调用能够向下传递(如果一个类继承了一个方法,并且调用了父类(super class)中的方法,那么子类中也会调用它)。有什么类似于我所要求的吗?

编辑:我正在使用的现代方法是有效的,但没有我希望的那么有效。我只是想知道是否有一种方法可以调用从其父类(super class)/超接口(interface)继承的方法。上次我找这个的时候也没有找到。

注意:所有子类都是未知的,因此无法使用。唯一已知的类是父类(super class),这就是我无法调用它的原因。这可以使用我目前正在使用的 Reflections API 来解决。然而,它并不总是符合我正在寻找的东西。

最佳答案

Java 中的每个方法都是虚拟,除了静态方法、final方法和构造函数,这意味着如果子类实现了该方法,调用时,将调用子类的实现。如果子类也希望调用直接父类(super class)方法,则可以通过调用 super 来完成。

这对于抽象类来说很常见,框架使用一些基类,但客户端需要重写。例如:

public abstract class Drawer{
public void draw(){
//setup code, etc common to all subclass implementations
doDraw();
}
protected abstract void doDraw();
}

public class CircleDrawer extends Drawer{
protected void doDraw(){
//implementation of how to actually draw a circle
}
}

现在,当您拥有 CircleDrawer 的实例并调用 draw() 时,父类(super class) Drawer.draw() 方法将是调用,即能够调用 CicleDrawer.doDraw()

编辑现在,如果CircleDrawer是这样的:

public class CircleDrawer extends Drawer{
public void draw(){
//do stuff
}
protected void doDraw(){
//implementation of how to actually draw a circle
}
}

CircleDrawer 实例调用 Drawer.draw()始终调用 CircleDrawer.draw() 方法。

关于java - 在父类(super class)的所有子类上调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com