我已经将Java代码交给了两个接口
interface ISuper {}
interface ISub extends ISuper {}
和两个实现它们的类
class ParentClass implements ISuper {}
class ChildClass extends ParentClass implements ISub {}
在代码中
ParentClass myVariable = <properly defined ParentClass object>
if(! (myVariable instanceof ISub)) {
<throw an error that breaks the code>
}
仅仅是阅读此内容,似乎检查(myVariable instanceof ISub)
应始终返回false
,因为ParentClass
未实现ISub
,因此代码应始终中断。因此,似乎作者希望将myVariable
识别为ISub
的实例。
事实上,这些代码在某些机器上确实可以正常执行!特别是,它无法在
下运行的代码中断java version "1.7.0_101"
OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
但是,它确实在我的本地计算机上按预期中断了
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
我用一些玩具代码进行了一些本地测试并找到了
myVariable instanceof ParentClass -> true
myVariable instanceof ISuper -> true
myVariable instanceof ChildClass -> false
myVariable instanceof ISub -> false
一切如预期。
任何人都可以推断原作者的意图吗?是否存在我不知道instanceof
的使用应该在何处起作用的场景?