Java 实现接口的方法的返回类型
我很想知道处理实现接口的返回类型方法的最佳实践/SE约定是什么。具体来说,假设我们正在实现一个简单的树,其接口如下:Java 实现接口的方法的返回类型,java,methods,types,return,Java,Methods,Types,Return,我很想知道处理实现接口的返回类型方法的最佳实践/SE约定是什么。具体来说,假设我们正在实现一个简单的树,其接口如下: public interface ITreeNode { public ITreeNode getLeftChild(); public ITreeNode getRightChild(); public ITreeNode getParent(); } 我们有一个类TreeNode,它实现了: public class TreeNode impleme
public interface ITreeNode {
public ITreeNode getLeftChild();
public ITreeNode getRightChild();
public ITreeNode getParent();
}
我们有一个类TreeNode,它实现了:
public class TreeNode implements ITreeNode {
private TreeNode LeftChild, RightChild, Parent;
@Override
public ITreeNode getLeftChild() {
return this.LeftChild;
}
@Override
public ITreeNode getRightChild() {
return this.RightChild;
}
@Override
public ITreeNode getParent() {
return this.Parent;
}
}
我的问题是。。各自实现的方法的返回类型应该是ITreeNode还是TreeNode,以及原因
Eclipse会自动为TreeNode填充返回类型为ITreeNode的方法。但是,即使使用@Override标志,将其更改为TreeNode也不会导致任何错误或警告。自Java 5以来,被重写的方法可以返回超类中提到的返回类型的接口/类的任何子类。除非特别需要,否则我将坚持返回接口(这主要发生在重构旧代码时,客户机已经在使用特定的实现类,而我们现在正在重构它以形成类层次结构),返回类型应为接口类型.Reason,以便以后可以更改基础实现
1 Example> ITreeNode node = new Tree1(); // First Underlying Implementation
2 Example> ITreeNode node1 = new Tree2(); // Second Underlying Implementation
我想,如果我错了,请纠正我 您提到的所谓协变返回,它在JDK1.5之前是不存在的。Java语言中添加了协变返回概念以支持Java泛型。欲了解更多信息
我更喜欢TreeNode作为TreeNode类的返回类型 您需要决定TreeNode对象应该做什么。如果其节点可以包含除实现ITreeNode的TreeNode之外的其他内容,那么不仅返回类型需要是ITreeNode,实例成员也需要是ITreeNode。否则,如果一直都是TreeNodes,那么我不清楚为什么要麻烦使用接口