异常软件OCAJP

时间:2013-09-15 11:05:49

标签: java instanceof scjp

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错误

2 个答案:

答案 0 :(得分:2)

instanceof运算符仅在通过某些继承链接对象时才计算true或false,否则抛出错误

答案 1 :(得分:0)

第三个条件给出了编译时错误,因为Bat没有扩展到Bird,作为第二个原因,Java类最多可以扩展一个类,因此Bat的子类不可能扩展到Bird类并且基于这个规则JVM足够聪明,可以发现Bat不能成为Bird。