今天看到AWT, Dialog这章. 发现了一个小问题.Dialog这个构造方法  Dialog(Dialog owner);owner为啥还可以是Frame类的对象呢,这里面是否用到了转型的问题呢,麻烦各位先帮我解释下这问题.其二,麻烦各位帮小弟解释下java的转型.向上,向下.父类变量指向子类对象, 或是什么不能指向什么的.就是什么可以,什么不可以.举两例子.我让这转型问题弄2乎了.一会这个可以,那个又不可以的.还有为什么向下转型不安全.谢谢

解决方案 »

  1.   

    第二个问题class A {}
    class B extends A {
    public void print() {}
    }
    ...
    B b = new B();
    A a = b; //将子类赋给父类:向上转型

    A a1 = new A();
    B b1 = (B)a1; //将父类赋给子类:向下转型,向下转型是不安全,如下

    // b1.print();
    // 对于类B,调用以上方法是允许的,问题在于,b1实际上类A的一个引用,
    // 结果自然是悲剧了第一个问题:
    这不关转型的事,JDK6.0:
    在构造 dialog 时,dialog 可以拥有另一个窗口作为它自己的窗口。当可见的 dialog 的所有者窗口被最小化时,dialog 会自动隐藏为对用户不可见。当所有者窗口被还原时,dialog 重新又变为用户可见的。 
      

  2.   

    因为Dialog的构造方法有很多,其中还可以是Frame参数的。
    Dialog(Frame owner)  Constructs an initially invisible, modeless Dialog with the specified owner Frame and an empty title.这是API写的   跟转型没什么关系,因为Dialog 和 Frame 都同时是window的子类,两者可以说是同等的关系。问题二:
    假如一个方法的参数类型是Object的,但是我实际中传入的是Integer类型的  那么我在使用这个变量的时候就需要向下类型转换,例如 Integer i = (Integer)obj
    假如有一个类叫Dog类  他有一个父类叫Animal类   那么我可以这样声明  Animal dog = new Dog();这就是向上类型转换也就是父类引用指向子类对象。