为什么可以将JFrame强制转换为JPanel?

时间:2013-01-15 23:49:43

标签: java inheritance interface casting polymorphism

以下是一个例子:

// set up frame, panel
JFrame container = new JFrame("Game Example");
panel = (JPanel)container.getContentPane();

我检查了Java API,这两个类实现了相同的接口,那么多态性的原因是什么?

或者是因为两个类都通过继承从Component类继承?

2 个答案:

答案 0 :(得分:4)

这就是contentPane通常 一个JPanel。打印出对象的类名,亲眼看看。

System.out.println(container.getContentPane().getClass().getName());

请注意, 实际上是“将JFrame强制转换为JPanel”。 JFrame的contentPane不是JFrame本身,不是很难。

答案 1 :(得分:1)

语法隐含的优先顺序是:

panel = (JPanel)(container.getContentPane());

panel = ((JPanel)container).getContentPane();

注意,除了扩展Component之外,显然还要扩展Object