首先,让我清楚我所说的声明类型是什么意思。假设 SuperBoss 是 Boss 类的超类。
SuperBoss mrBond = new Boss();
SuperBoss 是声明的类型,而 Boss 是实际的类型。
就个人而言,我认为由于以下运行时异常,声明的类型在运行时发生了更改:
SuperBoss mrWayne = new SuperBoss();
((Boss)mrWayne).randomMethod();
//Exception: java.lang.ClassCastException: SuperBoss cannot be cast to Boss
我知道这可能看起来微不足道,但我将在下个季度进行辅导,我不想教学生错误的东西。本季度我的教授和她的助理在这个问题上意见不一。我的教授认为,强制转换确实会在运行时完全改变单个语句的声明类型。TA 坚信在运行时,转换只是被检查,但实际上并没有改变声明的类型。