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中是很常見的。 –
我不明白你的問題 –