我正在阅读有关顺序搜索实现SequentialSearch ,发现了一些没什么意义的东西(或者至少在我看来似乎是这样)
public Iterable<Key> keys() {
Queue<Key> queue = new Queue<Key>();
for (Node x = first; x != null; x = x.next)
queue.enqueue(x.key);
return queue;
}
方法如何返回接口?我们不应该返回类/基元类型吗?
答案 0 :(得分:5)
这是多态性的一个例子。 意味着可以从此方法返回对实现接口的任何类的对象的引用。
如果方法要被子类覆盖,则使用此设计。 方法签名表示一个合同,所有重写此方法的子类都应返回方法签名中提到的接口的特定实现。
答案 1 :(得分:1)
不仅可以该方法返回一个界面,应该。
调用该方法的客户可能需要一个&#34;组&#34; (我使用那个词是语言不可知的,并避免与像{/ 1}}这样的东西发生冲突)Key
s,他可以迭代并做事。如果他需要做的就是遍历它们,那就给他一个Iterable
。然后,作为keys()
方法的维护者,您可以随着时间的推移自由地发展它,以便在封面下使用不同的,可能更高效的实现。客户将幸福地意识不到您的实施变化。
这是你可以而且应该内化的最重要的面向对象设计范例之一:program to interfaces, not implementations
答案 2 :(得分:0)
A method returning an interface
表示您可以返回实现该接口的任何类的实例。