在 Java 中重写时,有没有办法在特定类中调用方法?

Is there a way to call a method in a specific class when overriding in Java?

提问人:Ray 提问时间:12/25/2022 最后编辑:Ray 更新时间:12/25/2022 访问量:52

问:

我想实现以下功能,其中大写字母表示类型:

// Recursive functions with base case omitted
Class A {
  X f1(Y y) { ... AA aa = this.f2(Z z); ... }
  AA f2(Z z) { ... X x = this.f1(Y y); ... }

Class B extends A {
  @Override
  X f1(Y y) { ... AA aa = this.f2(Z z); ... }
  @Override
  AA f2(Z z) { ... AA aa = super.f2(Z z); X x = this.f1(Y y);... }
}

但是,当我调用 时,会在 中调用。是否有一些特殊的语法/关键字(而不是这个)允许我总是调用?new B().f2(z) B::f1A::f2A::f1A::f2

我知道您可以重新实现相同的功能,但我想避免这种情况

Java 继承 方法

评论

2赞 user16320675 12/25/2022
这表明您的模型可能不正确 - 如果应该调用原始方法,为什么要重写方法
0赞 Ray 12/25/2022
@user16320675原始方法和新方法都在 B::f2 中调用;原来的在 super.f2(z) 中调用,新的在 B::f2 中直接调用
0赞 Dawood ibn Kareem 12/25/2022
你可以将 的代码移动到另一个方法,然后直接调用,并调用而不是 .A::f1f3A::f1f3A::f2f3f1

答:

0赞 knittl 12/25/2022 #1

不,Java 是不可能的。如果某个方法被重写,则在类实例上调用该方法将调用最具体的方法。这称为 frage 基类问题

C# 引入了关键字来解决这个问题,但 Java 没有提供这种可能性。new