代码:
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 ?

解决方案 »

  1.   

    o是变量的类型,为这个变量赋值的是Circle类型,因为Object是Circle的祖先类型所以赋值兼容,所以o现在是Circle类型,你可以输出一下o.getClass()。
      

  2.   

    Object o=new Circle();  父类对象通过子类对象实例化以后,父类对象就变为了子类的类型
      

  3.   

    o=new Circle();  这个
    o对象本质是指向Circle引用。
      

  4.   

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