因此,我在一个包含零碎内容的文件夹中得到了这段代码,这些代码将用于一个项目,该项目已停止开发。然而,作为 Java 新手,我有几个问题(我知道代码无法编译,但这解决了我的问题之一)。
interface Executable {
public int execute (Object o);
}
public class Biv implements Executable {
public int execute (String s) {
System.out.println (s);
return s.length();
}
public static void main (String[] args) {
Executable e = new Biv();
System.out.println(
e.execute ("Hello World!"));
}
}
1) 我的第一个问题与变量 e 有关。它是用 Executable 对象类型声明的,但是我不明白为什么它可以用新的 Biv 对象实例化。这是怎么回事,这意味着什么?
2) 错误出现在 Biv 类中的执行方法中。这似乎是因为它需要一个对象而不是字符串。但是,不能因为 String 是 Object 的子类,就不能用 String 替换 Object 吗?我可以理解,如果您用 Object 替换 String ,它会出现错误(我认为),但不知道当前是如何完成的。
最佳答案
I don't understand why it can then be instantiated with a new Biv object
因为 Biv
实现了 Executable
,所以 Biv
的任何实例也是 Executable
的实例。
The error is in the execute method within the Biv class
是的,它 [Biv
] 没有实现 execute(Object)
。方法 execute(String)
只是一个碰巧具有相同名称的不同方法,因为它们没有相同的签名。任何实现Executable
接口(interface)的类都必须重写execute(Object)
方法。
没有co-variance java中重写方法的参数,因为它是不安全的。如果调用e.execute(new Object())
会怎样? [其中 e
引用 Biv
对象] Biv
将不知道如何处理它。
关于java - 类继承和类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10067428/