我尝试创建一个扩展 File 类( java.io.File
)的类,并实现 TreeNode 接口,如下所示:
public class mTreeNode extends File implements TreeNode{}
并尝试实现 TreeNode 方法,但发生了冲突。
文件类上的 public String getParent(){}
与返回类型 TreeNode 接口上的public TreeNode getParent()
发生冲突。
我们如何解决? (例如为什么不能将Object类用于返回类型!)
最后我决定在课堂上使用一个文件对象。
答案 0 :(得分:2)
由于TreeNode
是一个接口,因此您需要使用 exact 签名来实现该方法。它是实现它的类与编译器强制执行的外部世界之间的契约。
您可以阅读更多相关信息here.
答案 1 :(得分:1)
实现接口的类可以声明covariant return types。因此,实现接口的类中的返回类型必须与接口匹配或者是接口的子类。
e.g。
class Foo {
public String toString() {
return "foo";
}
}
interface Interface {
Foo getFoo();
}
class Bar extends Foo {
public String toString() {
return "bar";
}
}
class Concrete implements Interface {
public Bar getFoo() { // <============= Covariant return type
return new Bar();
}
}
public class Example {
public static void main(String[] args) {
System.out.println(new Concrete().getFoo());
}
}
课程将打印bar
。