有人可以解釋這一點。 當實例沒有可能的方式引用對象時,java instanceof運算符會給出編譯器錯誤。精細。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類型的實例?我誤解了什麼?
實際上,instanceof關鍵字是上傳後的向下轉換。 –
你完全正確! – user3627600