gpt4 book ai didi

java - 当对象调用其父类(super class)的方法时如何处理对象?

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:45:58 27 4
gpt4 key购买 nike

我正在尝试一些愚蠢的事情来使关于 Swing (我可以添加到哪个组件)和继承的概念变得清晰。

JFrame f = new JFrame();
JFrame g = new JFrame();
f.add(g); // i know that its silly.

它编译 fin 因为 JFrame 是一个 container 并且其中定义了 add 方法。它的声明是

Component add ( Component comp);

如果我做了上面有趣的事情,我会得到异常提示

adding a window to a container.

我由此分析出的是,当我们调用继承树中上述类中定义的方法时,该对象被视为继承树中上述类的对象。就像我们在这里做的那样

f.add(g);

f 被视为容器,因为 add() 未在 JFrame 中定义,而是在其父级(或父级到父级)中定义具体来说)就是 Container。虽然 g 被视为组件,因为 JFrame 也是一个 Component

这似乎是一个正确或错误的问题,但请从技术上向我解释一下,我认为是对还是错?

但是为什么异常在说

adding a window to a container.

为什么不

adding a container to a component.

as g 作为 component 传递给 add()?

我的第三个问题是ComponentContainer之间递归继承的必要性是什么?

编辑为什么异常这么说?

最佳答案

JFrame extends Frame extends Window extends Container extends Component

因此 JFrame 间接地是一个 Component 并且 jframe.add(jframe2)合法的并且作为 JFrame is child of Window 消息说将窗口添加到容器。 是非法的。

因为它在 Container 类中检查如下,

 /**
* Checks that the component is not a Window instance.
*/
private void checkNotAWindow(Component comp){
if (comp instanceof Window) {
throw new IllegalArgumentException("adding a window to a container");
}
}

关于java - 当对象调用其父类(super class)的方法时如何处理对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31609886/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com