带有接口的instanceof

nan*_*itv 10 java instanceof

如果我尝试使用错误的类的instanceof运算符我得到一个编译错误("动物不能转换为字符串"),但有一个接口,我没有得到编译时错误.

例如:在第10行,我收到编译错误,因为Animal不是String的子类.但是在第14行中,即使Animal没有实现List接口,我也没有收到编译错误.

class Animal {

}

public class InstanceOf {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
         Animal a = new Animal();
        if (a instanceof String ){  //line 10
            System.out.println("True");
        }

         if (a instanceof List ){ //line 14
            System.out.println("True");
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

Era*_*ran 18

a 永远不能成为String的instanceof,因此编译错误.

a可以是一个实例,List如果某个子类Animal将实现该List接口,您将分配这样的子类的实例a.因此编译器允许它.

来自JLS:

如果RelationalExpression对ReferenceType的强制转换(第15.16节)将作为编译时错误被拒绝,则关系表达式的实例同样会产生编译时错误.在这种情况下,instanceof表达式的结果永远不会成立.

  • @nantitv是的.由于Animal不是String的子类,因此Animal的任何子类都不能是String的子类.虽然在您的特定代码段中,即使允许多重继承也不会产生任何影响,因为String是final,不能是子类. (3认同)