1
import javax.swing.*;
class Foo{
public static void main(String args[]){
JFrame f=new JFrame();
f.add("North",new JButton()); //Line 1
f.add(new JButton(),"North"); //Line 2
f.setVisible(true);
}
}
swing API声明JFrame类包含5个方法的名称add,继承自java.awt.Container和另一个继承自java.awt.Component的add方法。在Java中使用此方法调用时调用的方法是什么?
**Their signatures are as follows:**
*Inherited from java.awt.Container*
add(Component)
add(Component,int)
add(Component,Object)
add(Component,Object,int)
add(String,Component)
*Inherited from java.awt.Component*
add(java.awt.PopupMenu)
我预计在API中会有两个带签名添加(Component,String)和add(String,Component)的重载方法。但看到这种情况并非如此,我认为第1行调用add(String,Component),第2行调用add(Component,Object)。
另外,任何人都可以给我一个关于如何执行被调用的方法的解释。我试图通过查看API的来源来弄清楚这一点,但方法调用链就像一个迷宫,我可以使用曾经在那里的人的指导。
事实上,他们都调用['Container#addImpl(Component,Object,int)'](http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#addImpl %28java.awt.Component,%20java.lang.Object,%20int%29),期望'add(PopupMenu)' – MadProgrammer
'add(Component,Object)'是这里唯一的候选重载。另外,你说的没错,只是调用另一种方法的方法在Java中是很常见的。 –
我不明白你的问题 –