首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义'Set set = new HashSet()‘时,set是接口的实例还是类的Set?

定义'Set set = new HashSet()‘时,set是接口的实例还是类的Set?
EN

Stack Overflow用户
提问于 2010-09-15 14:34:19
回答 5查看 16.9K关注 0票数 4

在Java中,'Set‘和'List’是从'Collection‘接口派生的接口。如果我们使用以下代码:

代码语言:javascript
复制
import java.util.*;

public class SetExample{

    public stactic void main(String[] args){
      Set set = new HashSet();
      //do something .....
    }

}

在"Collection“API中是否有一个我们正在创建对象( 'Set‘)的类’set‘?或者我们正在实例化一个接口'Set'?

我真的很困惑......:O

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-09-15 14:37:20

java.util.Set是一个接口,不是一个类。所以

代码语言:javascript
复制
Set set = new HashSet();

创建一个作为HashSet实例的对象,并将对该对象的引用分配给类型为Set的变量。这是因为HashSet类实现了Set接口。另一方面:

代码语言:javascript
复制
Set set = new Set();

给出一个编译错误,因为您无法创建接口的实例。

Java接口本质上是实现(类)和使用它的事物之间的契约。它说明了符合条件的对象的方法的名称和签名,但没有说明对象的状态或其方法是如何工作的。

(为了让事情有点混乱...Java还允许您编写类似如下的代码:

代码语言:javascript
复制
Set set = new Set() {
    // attributes and methods go here
};

这本身并不会创建Set接口的“实例”...因为这没有任何意义。相反,它声明并实例化一个实现Set接口的匿名类。)

票数 12
EN

Stack Overflow用户

发布于 2010-09-15 14:41:55

以下是一些建议:

  • What are Interfaces? (Sun Java Tutorial)
  • The Set Interface (Sun Java Tutorial)
  • The Collection Interface (Sun Java Tutorial)
  • Interfaces (Sun Java Tutorial)

您还应该阅读Effective Java by Joshua Bloch,特别是第52条:“通过接口引用对象”(有一个可查看的小片段here)。

票数 4
EN

Stack Overflow用户

发布于 2013-12-10 22:03:28

java.util.Set接口提供了与java.util.HashSet对象的松耦合。因此,开发人员可以使用另一个java.util.Set接口族对象的java.util.Set引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3715209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档