interface Flyer{ }
class Bird implements Flyer { }
class Eagle extends Bird { }
class Bat { }
public class TestClass {
public static void main(String[] args) {
Flyer f = new Eagle();
Eagle e = new Eagle();
Bat b = new Bat();
if(f instanceof Flyer) System.out.println("f is a Flyer");
if(e instanceof Bird) System.out.println("e is a Bird");
if(b instanceof Bird) System.out.println("f is a Bird");
}
}
这是来自Enthuware的代码示例。 我无法弄清楚为什么第三个instanceof运算符(b instanceof Bird)不计算为false,而是给我一个编译时错误。 附: -i无法得到Enthuware试图解释我的东西
我得到的编译时错误是
TestClass.java:16:错误:不可转换的类型
if(b instanceof Bird)System.out.println(“f is a Bird”); ^
必需:鸟
发现:蝙蝠
1错误
答案 0 :(得分:2)
instanceof运算符仅在通过某些继承链接对象时才计算true或false,否则抛出错误
答案 1 :(得分:0)
第三个条件给出了编译时错误,因为Bat没有扩展到Bird,作为第二个原因,Java类最多可以扩展一个类,因此Bat的子类不可能扩展到Bird类并且基于这个规则JVM足够聪明,可以发现Bat不能成为Bird。