从父类中调用父方法

奇人

举一个脑筋急转弯的例子,我的一位教授在做完运动后为我们提供了有关继承的知识。我们必须找出输出。

//java
public class A {
    public void f() {
        System.out.println("A -> f()");
        x = x + 4;
        if (x < 15) this.f(); //the f-call
    }
    public int x = 5;
}

public class B extends A {
    @Override
    public void f() {
        System.out.println("B -> f()");
        x = x + 3;
        super.f();
    }
}

public class Main {
    public static void
    main(String[] args) {
        A a = new B();

        System.out.println("a.f()");
        a.f();
        System.out.println(a.x);
    }
}

如我所料,输出是

  • af()
  • B-> f()
  • A-> f()
  • B-> f()
  • A-> f()
  • 19

但是,我现在想知道。有没有一种方法可以使A中的f调用在A中调用f方法,即使我从B对象使用它也是如此,类似于我使用super.f()从B中的A调用f的方法。因此输出将变为(我认为):

  • af()
  • B-> f()
  • A-> f()
  • A-> f()
  • 16

这可能吗?如果是这样,怎么办?

注意:我不确定这的实际应用是什么,我只是想学习一些新知识:P

tddmonkey

简短的回答是“不”,您不能这样做。

更长的答案是,允许这样做将破坏有关继承的所有保证。您的B类从本质上说“我现在为...提供规范方法public void f()”。因为B提供了上述方法,所以可以调用父方法来使用它(这是一件非常有用的事情)。

如果A被允许做同样的事情,那实际上将绕过B想要覆盖的行为

有多种模式可以使您获得类似的行为,例如模板模式

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章