小编典典

强制调用基类方法

java

下面的代码在运行时显然会打印出“ B1 / A2 / B2”。现在,是否可以改为打印“ A1 / A2 /
B2”(即A#method2()应该在A而不是B上调用method1())?

注意:我不需要获得传递多态性,这个问题仅出于好奇。

class A {
    public void method1() {
        System.out.println("A1");
    }

    public void method2() {
        method1();
        System.out.println("A2");
    }
}

class B extends A {
    @Override public void method2() {
        super.method2();
        System.out.println("B2");

    }

    @Override public void method1() {
        System.out.println("B1");
    }
}

public class Tmp {
    public static void main(String args[]) {
        B b = new B();
        b.method2();
    }
}

阅读 211

收藏
2020-10-16

共1个答案

小编典典

是的,您可以做到。在包 a中 定义A :

package a;
public class A {
    void method1() {
        System.out.println("A1");
    }
    public void method2() {
        method1();
        System.out.println("A2");
    }
}

在包 b中 定义B :

package b;
import a.A;
public class B extends A {
    @Override public void method2() {
        super.method2();
        System.out.println("B2");
    }
    void method1() {
        System.out.println("B1");
    }
}

将测试放入软件包 a中 并运行它。结果是A1 / A2 / B2。当然这是不健康的:请注意在method1上@Override的必要省略-
如果将其放回原位,则会出现编译器错误:

method does not override or implement a method from a supertype
2020-10-16