java - 为什么调用构造函数的重写方法而不是他的类中的方法?

标签 java scjp

通过运行以下代码我得到了结果:

A类的方法
B 类的方法。

public class Test {

    static class A {

        public A() {
            someMethod();
        }

        public void someMethod() {
            System.out.println("method from class A");
        }
    }

    static class B extends A {
        public void someMethod() {
            System.out.println("method from class B");
        }
    }

    public static void main(String... args) {
        new A();
        new B();
    }
}

结果的第一行很清楚,但第二行则不清楚。为什么类A的构造函数不调用类A中定义的方法,而是调用类B的重写方法?编译后,构造函数 A 中的代码是否会以某种方式复制到类 B 中,以便我们实际上从类 B 中调用我们的方法?

最佳答案

第二个对象的类型为 B,因此当在构造函数中调用方法 someMethod 时,它将采用该方法的最后一个方法声明,类型为 B

关于java - 为什么调用构造函数的重写方法而不是他的类中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10568385/

相关文章:

java - 使用 Java 将字符串转换为 XML

java - java中如何将对象写入文件?

Java 泛型 - 父类(super class)型引用

java - 基于 SCJP 程序的怀疑(EXAM 310-065)

java - Spring 安全。 protected 注释不起作用

java - 什么是NullPointerException,我该如何解决?

java - 我如何在java中存储未知的数据类型(当用户输入(int/double)时就会知道)

java - 在接口(interface) : what is the outerclass? 中声明的匿名内部类

java - SCJP 有什么好东西吗?

java - 存储在 ArrayList 中的对象打印出正确的值。 Comparable Interface 是如何工作的?