首先,让我明确一下我所说的声明类型是什么意思。 假设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
我知道这似乎微不足道,但我将在下个季度担任辅导员,我不想教给学生们错误的东西。而且这个季度我的教授和她的助手在这个问题上意见不一。我的教授认为,在运行时,强制类型转换确实会完全改变单个语句的声明类型。而助教强烈认为,在运行时,强制类型转换仅被检查,但实际上并没有改变声明类型。