java - 强制调用基类方法

标签 java inheritance polymorphism

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

注意:我没有必要获得多态性,这个问题只是出于好奇。

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();
    }
}

最佳答案

我不这么认为;如果您要在子类中重写 method1() ,则不会。如果您确实需要这种行为,则必须将 A.method1() 声明为 final,并且无法在 B 中定义它>。

这样做对我来说没有意义 - 如果您认为需要,您应该重新考虑您的设计!

关于java - 强制调用基类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784542/

相关文章:

java - 如何直接在应用内浏览器(Chrome 自定义选项卡)中打开外部链接,而不提示选择浏览器

C++:将构造对象的引用传递给构造的成员对象?

java - 为什么建议将实例变量声明为私有(private)?

c++ - struct不继承虚函数

pointers - 具有可分配或指针属性的无限多态虚拟参数?

java - 如何使用 Apache MINA 从套接字读取二进制数据?

java - URLConnection 类 java.net.ConnectException : Connection refused: connect

java - 具有太多类的命令模式

C++ 继承错误 : expected class name before '{' token

java - 未调用子类抽象方法