Code Bye

(JPanel) this.getContentPane() 父类可以强转成子类吗

如题,父类怎么可以强转成子类啊?
((JPanel) this.getContentPane()).setOpaque(false);
其中this是一个继承自JFrame的对象、、、
解决方案

40

父类可以强转成子类
Map和HashMap就经常转来转去的,具体运行的效果,要程序员本人确保
((JPanel) this.getContentPane()).setOpaque(false);这句拆开来读
this是一个继承自JFrame的对象,没有问题
this.getContentPane()查API文档,可以知道返回的是非常通用的Container【挺像Map的感觉】
Container里并没有定义setOpaque这个方法,所以不强制类型转换是通不过编译的
(JPanel) this.getContentPane()把Container强制类型转换为JPanel,还得用括号包起来以区分运算优先级
JPanel的对象就可以调用setOpaque方法了
那么问题来了:谁负责确保this.getContentPane()返回的这个通用的Container在运行时刻可以成功的转换为JPanel呢?
应该是JFrame的setContentPane负责做的,要么显示的执行,要么已经确保Java本人会调用,否则动作未定义

10

获取父类的引用,需要强制转换成子类引用才能引用子类独有的方法,否则编译器报错找不到该方法

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明(JPanel) this.getContentPane() 父类可以强转成子类吗