When defining 'Set set = new HashSet()', is set an instance of interface or class Set?

南笙酒味 提交于 2019-12-23 12:18:12

问题


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


回答1:


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.)




回答2:


Here are some pointers:

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

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)




回答3:


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.




回答4:


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)




回答5:


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.



来源:https://stackoverflow.com/questions/3715209/when-defining-set-set-new-hashset-is-set-an-instance-of-interface-or-clas

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!