日期:2014-05-19  浏览次数:20676 次

关于instanceof的用法,谷歌过了,仍有疑问
代码:

Object o=new Circle();  //Circle类继承至Object
if(o instanceof Circle){
System.out.println("OK.");
}


//请问上面的代码为什么会输出,网上说左操作数(o)是右操作数(Circle类)的
//实例或其子类(包含多层继承关系)的实例即返回true,问题是
//o是Object的实例而不是Circle类的实例,且也不是Circle子类的实例
//(Object是所有类的父类)That's why ?

------解决方案--------------------
o是变量的类型,为这个变量赋值的是Circle类型,因为Object是Circle的祖先类型所以赋值兼容,所以o现在是Circle类型,你可以输出一下o.getClass()。
------解决方案--------------------
Object o=new Circle();  父类对象通过子类对象实例化以后,父类对象就变为了子类的类型
------解决方案--------------------
o=new Circle();  这个
o对象本质是指向Circle引用。

------解决方案--------------------
这一块是java中多态中讲到,o接收的是Circle的实例,o instanceof Circle 结果是true