我最近偶然发现了一些一直让我烦恼的事情。
每当我想要在具有特定接口(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/