if(x instanceof X)的奇怪行为

New*_*ger -1 java inheritance class instanceof

我有一个类PartA和一个类PartB派生类PartA.我有一个PartA包含a和b部分的类型列表.我需要确定当我循环它时它实际上是哪种类.但如果我这样做:

for (PartA i : parts) {
    if (i instanceof PartA) {
        //some logic
    }
Run Code Online (Sandbox Code Playgroud)

无论它实际上是哪一类,它仍然会成立:a或b.

我做错了什么,如果没有,我能做些什么来达到预期的效果呢?

cdh*_*wie 6

实例PartB 也是实例PartA.始终首先检查派生类型最多.(读instanceof X为"是...的实例X或派生类型X.")

或者,更好的是,将多态性用于您的优势 - 可以将此逻辑移动到PartA您可以覆盖的方法中PartB吗?然后你不必实际测试对象的类型,你只需让虚拟方法调度为你找出.