Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

like image 610
Annibigi Avatar asked Dec 04 '22 11:12

Annibigi


1 Answers

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

like image 55
Stephen C Avatar answered Apr 19 '23 22:04

Stephen C