例子:一个person类。
Obejcet obj = new Person();
if(obj instanceof Person){
  per= (Person)obj;
}不解之处请各位java高端写手解答一下:第一行这样写就表示obj是Person类的一个实例了,但第二行为什么要判断一下obj是不是Person类的实例,不是没必要吗,既然是Person的实例了就可以直接进行第三行向下转型的操作了啊。

解决方案 »

  1.   

    因为Object类是Person类的父类,所以
    Object obj=new Person()实际上表达的是创建一个Person类的实例,由其父类的变量obj引用此实例
    由于其父类的变量obj除了能引用Person类的实例外,还能引用任何Object的子类的实例,所以第二句判断下引用的是不是确实就是Person类的实例,如果是,就可以强制类型转换了。这个例子应该是为了演示继承与多态。
    当然你如果知道obj实际就是是在引用一个Person类的实例,大可以直接类型转换.以上是个人见解,如有不对请指教。
      

  2.   

    一楼正解,person是object的子类,而object有很多子类,从person到object转型可以直接转,因为person是Object的子类啊,举个例子吧 ,人是动物的一个子类,你可以说人是动物,就像person到object,但你能说动物是人吗?就像object到person,肯定不行啊,所以要判断,但是如果你明确知道你所指的那个动物确实是人的话,也可以说动物是人,就像一楼说的如果知道obj实际就是是在引用一个Person类的实例,大可以直接类型转换.希望对楼主有帮助
      

  3.   

    Object是类的爷爷(有好多儿子),Person是其中一个儿子,所以当爷爷带着一个孙子的时候,都要问问是不是Person的儿子。(比喻不恰当,但是哪个意思了)