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

标签 java inheritance super

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

每当我想要在具有特定接口(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/

相关文章:

java - Apache Flink,任务槽数与 env.setParallelism

java - 从列表中删除对象后将其保留在 map 中

list - 列出 Rust 中的不同类型

python - 类型错误 : Super does not take Key word arguments?

java - 在 Java 中使用 super

Java,用冒号分割输入文件

java - 如何停止程序在关闭GUI上运行无限循环(java)

C++:使用模板继承类

iphone - 在类之间传递NSString

python - 如何使用 super 命令python