在Java中,'Set‘和'List’是从'Collection‘接口派生的接口。如果我们使用以下代码:
import java.util.*;
public class SetExample{
public stactic void main(String[] args){
Set set = new HashSet();
//do something .....
}
}在"Collection“API中是否有一个我们正在创建对象( 'Set‘)的类’set‘?或者我们正在实例化一个接口'Set'?
我真的很困惑......:O
发布于 2010-09-15 14:37:20
java.util.Set是一个接口,不是一个类。所以
Set set = new HashSet();创建一个作为HashSet实例的对象,并将对该对象的引用分配给类型为Set的变量。这是因为HashSet类实现了Set接口。另一方面:
Set set = new Set();给出一个编译错误,因为您无法创建接口的实例。
Java接口本质上是实现(类)和使用它的事物之间的契约。它说明了符合条件的对象的方法的名称和签名,但没有说明对象的状态或其方法是如何工作的。
(为了让事情有点混乱...Java还允许您编写类似如下的代码:
Set set = new Set() {
// attributes and methods go here
};这本身并不会创建Set接口的“实例”...因为这没有任何意义。相反,它声明并实例化一个实现Set接口的匿名类。)
发布于 2010-09-15 14:41:55
以下是一些建议:
您还应该阅读Effective Java by Joshua Bloch,特别是第52条:“通过接口引用对象”(有一个可查看的小片段here)。
发布于 2013-12-10 22:03:28
java.util.Set接口提供了与java.util.HashSet对象的松耦合。因此,开发人员可以使用另一个java.util.Set接口族对象的java.util.Set引用。
https://stackoverflow.com/questions/3715209
复制相似问题