日期:2014-05-20  浏览次数:20621 次

java 向下转型疑问!
[code=Java][/code]
import java.awt.*;
import java.awt.event.*;
public class TestStopWatch extends Frame{
/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
TestStopWatch tsw = new TestStopWatch();
tsw.setSize(1000, 800);
tsw.setVisible(true);
tsw.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
e.getWindow().setVisible(false);
((Window)e.getSource()).dispose(); //这行.
}
});
}
}

这是我的疑问,我觉得不能进行向下转型,请问我的问题在哪里?问题补充: 


我想问的是,
怎么可以那么随意的向下转型,不会危险吗?

------解决方案--------------------
((Window)e.getSource()).dispose()
这句代码会先执行e.getSource.返回的是Object类型,Object类型是一起引用类型的父类
自然可以强制转换.
你试着((Window)e).getSource.dispose就会发现不能强制转换了.这种转换要满足一个条件
必须存在这种父子关系才能强制转换,为了避免这种情况,我们一般用instance of来判断,
if(s1 instanceof s2){
。。。执行业务代码
}写了这么多,给点分吧》。

------解决方案--------------------
向下转型不是编译期能发现的,而必须等到运行期。
因此就如楼上说的用instanceof判断一下。
------解决方案--------------------
子类可以任意的转到其父类或者实现了的接口。

而且,强制转型,特别是当前类不明确时,比如Object, 只能在运行期间判断了。
------解决方案--------------------
随便向下转型肯定会出问题啊.你的方法只需要一个超类A的,那么你就只能当它是A类来使用.因为你不可能知道是不是某一个向下的类型.
------解决方案--------------------
+1
探讨

子类可以任意的转到其父类或者实现了的接口。

而且,强制转型,特别是当前类不明确时,比如Object, 只能在运行期间判断了。

------解决方案--------------------
要理解继承的概念
就像已经造好的建筑,你要不用某个空房间可以,但是不能增加额外的空间。
这个个人估计只有发展到智能电脑才可以
------解决方案--------------------
因为触发窗口关闭事件的源必然是一个Window对象,所以这里没有问题。
------解决方案--------------------
探讨
子类可以任意的转到其父类或者实现了的接口。

而且,强制转型,特别是当前类不明确时,比如Object, 只能在运行期间判断了。

------解决方案--------------------
YOUYOU。。。楼主好棒··