我對Java類實現的抽象方法簽名頗感困惑。Java抽象方法簽名
例如,請考慮:
interface Programmer {
Object program();
}
class Linus implements Programmer {
public String program() {
return "goto end;";
}
}
public class Main {
public static void main(String[] args) {
System.out.println(new Linus().program());
}
}
這顯然是可以接受的,因爲任何希望的對象來自Linus.program()將獲得一個(具體來講,字符串)。
但是現在考慮這個問題:
interface OS {
void run(String code);
}
class Linux implements OS {
public void run(Object code) {
System.out.println("Hello world");
}
}
public class Main {
public static void main(String[] args) {
new Linux().run("print 'Hello world'");
}
}
這編譯失敗,併產生錯誤:
The type Linux must implement the inherited abstract method OS.run(String)
現在,什麼事情都可能期望能夠將字符串傳遞到的任何實例OS界面,你當然可以用Linux來做到這一點。
我沒有看到第二個編譯失敗的原因。使用Java編譯第二個程序的後果,我錯過了一些令人望而卻步的東西嗎?
超載,不重寫...... – 2013-03-09 09:07:29
@OliCharlesworth感謝您糾正:) – asifsid88 2013-03-09 09:08:40