当定义“Set set = new HashSet()”时,set是接口还是类Set的实例?

发布于 2024-09-24 03:19:17 字数 344 浏览 2 评论 0原文

在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

In Java, 'Set' and 'List' are interfaces derived from 'Collection' interface.
If we use the code:

import java.util.*;

public class SetExample{

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

}

Is there a class 'Set' in "Collection" API that we are creating an object ('set') of? or we are instantiating a interface 'Set'?

Am really confused.......:O

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

何以笙箫默 2024-10-01 03:19:18

在 API 中,你会得到一堆隐藏实现的接口。例如 Set 允许您
隐藏任何实现,HashSet 就是其中之一。

In API you get a bunch of interfaces that hides the implementation. e.g. Set allows you
to hide any implementation, for which HashSet is one of.

战皆罪 2024-10-01 03:19:17

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接口的匿名类。)

java.util.Set is an interface, not a class. So

Set set = new HashSet();

creates an object that is a HashSet instance, and assigns a reference to that object to a variable whose type is Set. This works because the HashSet class implements the Set interface. On the other hand:

Set set = new Set();

gives a compilation error because you cannot create an instance of an interface.

An Java interface is essentially a contract between an implementation (a class) and the things that use it. It says what the names and signatures of a conforming object's methods are, but nothing about the object's state or how its methods work.

(Just to confuse things a bit ... Java also allows you to write something like this:

Set set = new Set() {
    // attributes and methods go here
};

This is does not create an "instance" of the Set interface per se ... because that doesn't make sense. Rather, it declares and instantiates an anonymous class that implements the Set interface.)

旧时光的容颜 2024-10-01 03:19:17

以下是一些提示:

您还应该阅读 Joshua Bloch 的《Effective Java》,尤其是第 52 条:“通过对象引用对象接口”(这里有一个小片段

Here are some pointers:

You should also read Effective Java by Joshua Bloch, especially item 52: "Refer to objects by their interfaces" (There's a small snippet viewable here)

花之痕靓丽 2024-10-01 03:19:17

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

java.util.Set interface provides the loose coupling with java.util.HashSet object. So developer can use the java.util.Set reference for another java.util.Set interface family object.

把时间冻结 2024-10-01 03:19:17

引用set 的类型为java.util.Set,它是一个接口。尽管它实际上指向java.util.HashSet类型的对象。 (多态性)

The reference set is of type java.util.Set which is an interface. Although it actually points to an object of type java.util.HashSet. (polymorphic)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文