java的强制类型转换问题

2025-01-07 04:15:22
推荐回答(4个)
回答1:

JButton btn=e.getSource();
左边是JButton 右边是Object,当然会出错

回答2:

1 如果e.getSource()==button1为true时,那么必定e.getSource()和button1指向同一个对象。这和对象的引用声明的是什么类型无关。
2 e.getSource()声明的返回类型为Object,所以不经过类型强制转换, 则你只能用一个声明为Object的引用去指向它的返回结果。(因为e.getSource可不只是能返回你的JButton啊)
就好比说,e.getSource()声明的是返回”中国人“ 所以你不能说它就一定是X省市的人,所以要求写成 X省市人 xxx = (X省市人)get中国人(); 如果get中国人()返回的不是X省市的人,那么就会抛出类型转换异常。
因为java要求你的这个类型转换要进行”显示转换“。
补充一点,这就是”强类型“的语言的特点,”弱类型“的语言则没有这些限制。比如javascript

回答3:

JButton btn=e.getSource();没执行时不知道e.getSource()是什么类型,只有执行了才知道。
JButton btn=e.getSource();如果e.getSource()正好是JButton类型那就行
所以要有
if(e.getSource() instanceof JButton){
JButton btn=(JButton)e.getSource();
}判断一下再转

回答4:

Object是所有类的父类,所以不用强转,而你e.getSource();返回的是个object类型,你却用Object的子类JButton btn进行接收,所以肯定要转的。 父类引用接收子类对象不用转换,子类引用接收父类对象是要转换的。