看下面的图片,注意JRadioButtonMenuItem不要延伸JRadioButton,甚至没有JToggleButton。我的猜测是他们重复代码。:P或者他们在这些切换组件中有一个中间类?

问题是 Java 不支持多重继承,否则您可以考虑同时JRadioButtonMenuItem扩展JMenuItem和JRadioButton(尽管尚不清楚这是否是一个好的实现选择)。
所以这意味着你必须选择一个或另一个,在这种情况下,已经选择了扩展JMenuItem。
现在,如果您看一下,您会看到JMenuItem并JRadioButton有一个共同的祖先,AbstractButton它实际上封装了ButtonModel与按钮当前状态相关的所有内容(武装、选定等)的存储位置。
在 a 的情况下,JRadioButtonMenuItem它使用 a ,因此在这里您可以了解和ToggleButtonModel共享相同模型的方式。JRadioButtonJRadioButtonMenutItem
关于视图,这一切都被委托给了BasicRadioButtonMenuItemUI,尤其是更多地委托给BasicMenuItemUI(它是 的父级BasicRadioButtonMenuItemUI)。最终它依赖于当前的外观来提供不同的图标、样式、边框、字体等......
这就是整个事情的进展。