java - 子类和父类(super class)的混淆

标签 java inheritance

Master test = new Inner();
System.out.println(test.getClass());

在上面的示例中,Inner 类扩展了 Master 类,但我感到困惑的是 test.getClass() 返回 Inner,但 test 不是真的属于 Master 类型吗?除了构造函数之外,内部类中不能使用任何方法/属性,只能使用主类中的方法/属性。此外,Inner 的构造函数实际上设置了 Inner 独有的属性,但不知何故,即使它使用构造函数,这些属性也不存在于测试中 - 这似乎不应该工作。

例如,如果将类定义为:

public class Master {
    public int number = 0;
    public Master() {
        number = 9;
    }
}

public class Inner extends Master {
    public int innerNumber = 0;
    public Inner() {
        number = 1;
        innerNumber = 2;
    }
}

test将使用Inner的构造函数来设置innerNumber,但test.innerNumber甚至不存在,因为innerNumber不是Master类型的一部分。另外,test.getClass()表示它是Inner类型,而不是Master类型。

最佳答案

Object.getClass() 返回对象的动态类型的类对象,而不是静态类型(您声明它的变量或属性的类型) .

因此 new Inner().getClass() 返回 Inner.classnew Master().getClass() 返回 Master.class 无论保存引用的变量是什么类型。

关于java - 子类和父类(super class)的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115138/

相关文章:

java - 获取数组类型的 Class 对象的最佳方法是什么?

java - Grails STS 环境中运行时和编译的不同 JRE

java - 需要在 Tomcat 或 JDK 中导入 SSL 证书

java - 通过继承和类型参数化存储库访问 JPA 方法

java - 父类(super class)中的 jXPath 查询属性

java - 为什么父类(super class)分配给子类会出错?

java - 该方法必须覆盖父类(super class)方法

java - yml 中的 KeyStore 配置

c# - 类型接口(interface) C# 的集合

java - 无法编译已实现接口(interface)的抽象类