【发布时间】:2013-02-24 21:10:36
【问题描述】:
我对 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)
现在,任何东西都可以将字符串传递到操作系统接口的任何实例中,您当然可以在 Linux 上做到这一点。
我看不出第二个编译失败的原因。在让 Java 编译第二个程序的后果中,我是否遗漏了一些使这令人望而却步的东西?
【问题讨论】:
标签: java inheritance methods polymorphism abstract