對於這一點:爲什麼不能在實現方法有一個參數
import java.awt.EventQueue;
import javax.swing.JFrame;
public class SwingExample11 extends JFrame implements Runnable {
public SwingExample11() {
initUI();
}
private void initUI() {
setTitle("SwingExample1");
setSize(300, 200);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
@Override
public void run(SwingExample11 ex) {
ex.setVisible(true);
}
public static void main(String[] argv) {
SwingExample11 ex = new SwingExample11();
EventQueue.invokeLater(ex);
}
}
我得到:
6: error: SwingExample11 is not abstract and does not override abstract method run() in Runnable
public class SwingExample11 extends JFrame implements Runnable {
^
16: error: method does not override or implement a method from a supertype
@Override
^
當我刪除了參數,並從run()
代碼塊彙編,但顯然沒有按什麼都不做。
當我實現一個接口時,我想我可以編寫該方法,但是我想要嗎?這是因爲它的抽象方法嗎?我認爲所有的接口方法默認都是抽象的,無論如何,我認爲如果你使用一種方法,那麼你可以用它來做你想做的事情。
我想我對抽象方法感到困惑。請問我哪裏錯了,什麼讓我更清楚地理解事情?
「我想我可以編寫這個方法,但是我想要」 - 這個假設是不正確的。我不知道還有什麼要說的...... –
因爲如果你爲方法添加一個參數,你改變了它的簽名,你不再覆蓋該方法,你正在添加一個不同的方法。 – bhspencer
除了根本的誤解是如何抽象方法的工作,這似乎是一個XY問題,那麼你爲什麼不回過頭來告訴你,你該怎麼做? – fge