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