Java enthuware OCAJP实例
这是来自Enthuware的代码示例。 我不明白为什么第三个instanceof操作符(b instanceof Bird)的计算结果不是false,而是给我一个编译时错误。 还有-我不明白恩图瓦雷想解释什么 我得到的编译时错误是 java:16:错误:不可转换类型 if(b鸟的实例)System.out.println(“f是鸟”); ^ 必填项:伯德 发现:蝙蝠Java enthuware OCAJP实例,java,instanceof,scjp,Java,Instanceof,Scjp,这是来自Enthuware的代码示例。 我不明白为什么第三个instanceof操作符(b instanceof Bird)的计算结果不是false,而是给我一个编译时错误。 还有-我不明白恩图瓦雷想解释什么 我得到的编译时错误是 java:16:错误:不可转换类型 if(b鸟的实例)System.out.println(“f是鸟”); ^ 必填项:伯德 发现:蝙蝠 1 errorinstanceof操作符仅当对象通过某种继承链接并抛出错误时才计算true或false,否则将抛出错误第三个条件给
1 errorinstanceof操作符仅当对象通过某种继承链接并抛出错误时才计算true或false,否则将抛出错误第三个条件给出编译时错误,因为Bat不会扩展到Bird,第二个原因是Java类最多只能扩展一个类,Bat的子类不可能扩展到Bird类,基于这一规则,JVM足够聪明,能够发现Bat不可能是一只鸟。下面的链接对您的问题有很好的解释。
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");
}
}