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.class
,new Master().getClass()
返回 Master.class
无论保存引用的变量是什么类型。
关于java - 子类和父类(super class)的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25115138/