让我们想象一下我有一个名为的类Person
,它是另一个类的泛化Man
。如果我要制作这个类的几个实例
Man man = new Man();
Person person = new Man();
现在,从变量引用的实例的编译时类man
是Man
,person 的编译时类是Person
,而两个实例的运行时类是Man
。到目前为止,我完全使用该术语,因为在运行时创建的实例都是 class Man
。但是,如果我按如下方式将 man 实例投射到哪里
Person personMan = (Person) man;
为什么运行时类型personMan
仍然是Man?实例的运行时类是否仅在创建新实例时设置?另外,有没有办法在运行时实际获取变量的编译时间类,所以我可以查询 personMan 是什么类型的类(getClass 会返回Man
)。
编辑:“类的编译时类”是一个错误(并且没有多大意义)。我的意思是可变的(因此他们质疑 personMan 是什么类型的类:))