class Mynode{};              
private JTree jt=new JTree();
DefaultMutableTreeNode dmtntemp=(DefaultMutableTreeNode)jt.getLastSelectedPathComponent();
 MyNode mynode=(MyNode)dmtntemp.getUserObject();jt.getLastSelectedPathComponent()返回类型是Object,将其强制转换为DefaultMutableTreeNode类型,而Object是所有类的父类,这不是将父类转换为子类吗?为什么编译运行还是通过?同样道理,dmtntemp.getUserObject()返回类型也是Object,将其强制转换为Mynode类型,而Object是所有类的父类,这不是将父类转换为子类吗?为什么编译运行还是通过?请大家指教啊!

解决方案 »

  1.   

    学Java的都知道,原因在于所有类都继承与Object!而你的DefaultMutableTreeNode和MyNode都是相当于Object,编译器完全可以识别!你Java继承有待提高啊!O(∩_∩)O哈哈~
      

  2.   

    对于语句
    Class1 obj1 = (Class2)obj2;
    编译能通过的原则是:
    Class2是Class1的子类,和obj2是什么类的对象没关系。
    运行时能通过的原则是:
    obj2实质上是Class2(及其子类)的对象,和obj2声明为什么类的对象没有关系。
      

  3.   

    Object是父类,它可以引用"子类对象",你可以把它当成Object使用,也可以当成具体的对象使用,
    比如说:Object o = new Integer(123);
    如果说你通过o这个变量(Object)来操作,是有限的,
    但是你通过
    Integer xx =(Integer)o;
    这样通过强制转换为实际的类型(前提是你已经知道是这种类型),通过xx来操作,你就可以获取更多的操作了.
    这里只是说它是Object类型的,也是Integer类型的,你可以把它当成Object来操作,也可以当成Integer来操作.你需要当成Integer类型来看,你就得先转成Integer,
    但以下是不成立:
    Object o = new String("134");Integer xx = (Integer)o;引用o实际引用的是String对象,你不能说想当成Integer就当成Integer来用.你可以Object o = new String("134");String xx = (String)o;
      

  4.   

    String str = "1";
    int i = Integer.purseInt(str);
    这样也可以完成转换。类型转换只能是具有父子继承关系的对象之间转换,有向上类型转换,向下类型转换。
    Person p = new Person();
    Female f = new Female();
    Person p1 = f;//向上
    Female f1 = (Female)p;//向下
      

  5.   

    如果Class1 cla1=(Class1)object编译成功,那么object instanceof Class1它的结果是true;;也就是object实质上是Class1或者它子类的对象,
      

  6.   

    顶2楼和3楼。Object是总的抽象父类,但不是说可以把下面的子类Integer转换String。
      

  7.   

    NullPointException!没女朋友的飘过