Master test = new Inner();
System.out.println(test.getClass());
在上面的例子中,Inner类扩展了Master类,但我感到困惑的是test.getClass()返回Inner,但是不是真的测试Master类型吗?除了构造函数之外,Inner类中不能使用任何方法/属性,只能使用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。
答案 0 :(得分:3)
Object.getClass()
返回对象的 dynamic 类型的类对象,而不是静态类型(您声明它的变量或属性的类型)。
因此new Inner().getClass()
会返回Inner.class
,new Master().getClass()
会返回Master.class
,无论保存引用的变量类型是什么。
答案 1 :(得分:0)
问题1:
Master test = new Inner();
上面一行表示get方法实现来自Inner
类( ovveriding )。所以内部类getClass()
方法调用。
问题2:
test.innerNumber
继承发生在Parent到Child之间。 innerNumber
是Inner
(孩子)的属性。 Master
(家长)不会得到它。