有人可以解释一下。 当实例无法引用对象时,java instanceof运算符会给出编译器错误。细
让我提供一些示例代码
public class InstanceOfConfusing {
class A {}
class B1 extends A {}
class B2 extends A {}
public static void main(String... args) {
InstanceOfConfusing ioc = new InstanceOfConfusing();
A a = ioc.new A();
B1 b1 = ioc.new B1();
B2 b2 = ioc.new B2();
boolean t1 = b1 instanceof A; // compiles, true
boolean t2 = b1 instanceof B1; // compiles, true
boolean t3 = b1 instanceof B2; // does not compile
boolean t4 = a instanceof B1; // compiles, false ***
}
}
我理解除了标有***的最后一行以外的所有内容。我的问题很简单,为什么要编译? 如果编译在前一行上给出“不兼容的条件操作数类型”错误,因为类型B1的对象无法引用类型B2的实例,不应该 也知道B1没有办法引用A?
我不能这样写一行:b1 = new A(); 我会得到一个“类型不匹配”编译器错误,这是理所当然的。那么为什么编译器不知道b1这里没有办法引用类型A的实例?我误解了什么?
答案 0 :(得分:0)
您可以使用向下转发进行分配。完成后,您可以了解a instanceof B1
的用法以及为什么需要编译它。
B1 b = (B1) new A();
答案 1 :(得分:0)
我认为这是因为B1扩展了A,所以你可以这样做:
A a = new B1()
因此,使用a instanceof B1
,您可以检查a是否是抽象类A的接口中包含的B1实例(例如)