我想知道有关instanceof
Java 中运算符的以下行为。
interface C {}
class B {}
public class A {
public static void main(String args[]) {
B obj = new B();
System.out.println(obj instanceof A); //Gives compiler error
System.out.println(obj instanceof C); //Gives false as output
}
}
为什么会这样呢?interface C
和之间没有关系class B
,但是它给出false,而如果obj instanceof A
给出编译器错误?
由于Java没有多重类继承,因此在编译期间绝对知道obj
type的对象B
不能是的子类型A
。另一方面,它可能是interface的子类型C
,例如在这种情况下:
interface C {}
class B {}
class D extends B implements C {}
public class A {
public static void main(String args[]) {
B obj = new D();
System.out.println(obj instanceof C); //compiles and gives true as output
}
}
因此,仅查看obj instanceof C
表达式编译器无法预先知道它是对还是假,但查看obj instanceof A
它知道这始终是假的,因此毫无意义,可帮助您防止错误。如果您仍然想在程序中进行无意义的检查,则可以在上添加显式强制转换Object
:
System.out.println(((Object)obj) instanceof A); //compiles fine
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句