GeeCON Prague 2014*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Having Interface on the left and Class on the right side Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Having Interface on the left and Class on the right side" Watch "Having Interface on the left and Class on the right side" New topic
Author

Having Interface on the left and Class on the right side

Arjun Reddy
Ranch Hand

Joined: Nov 10, 2007
Posts: 627
Hi all,

I always wondered why people do this, Set s = new HashSet() or Set s = new TreeSet() etc...Since I am readin and workin on collections now, I think it's because maybe later on if we want some additional methods from TreeSet which are not there in the HashSet, all we need to do is change new HashSet() to TreeSet() right? The code will not break and we need not do more work where as if we do, HashSet s = new HashSet() we need to change it on the left and on the right hand side too. Am I correct?

Thanks.


Be Humble... Be Nice.
Ananth Chellathurai
Ranch Hand

Joined: Nov 21, 2007
Posts: 349

Hi Arjun,

To my knowledge you are right. Let us see what others say.

Ananth Chellathurai


Ananth Chellathurai [Walk on software]
Manju Kavi
Ranch Hand

Joined: Sep 25, 2008
Posts: 33
Hi,
Its all about polymorphism. Any variable of type superclass or interface which is implemented by a class (in this case interface Set implemented by TreeSet or HashSet) can refer to any object which implements Set i.e., Set a=new TreeSet(); "a" is a variable of type Set and refering to object of type TreeSet. Here variable "a" is set to be polymorphic, i.e the ability to refer to more than one subclass or class which implements Set interface. One of the feature of polymorphism is to provide the ristricted access to subclass objects. Here using variable "a" you can access only the methods which are declared in the interface Set. In case of class, you can access only the overriden methods.
chander shivdasani
Ranch Hand

Joined: Oct 09, 2007
Posts: 206

The other use would be to use a single Reference to point to multiple objects.
For Example

Set s = new HashSet();

Now after calling some functions, you know that the work of HasSet Object is done, and you need TreeSet Object.
What you can simply do is

s = new TreeSet();

You dont need to create another reference especially for TreeSet Object. And the number of references used in your code will be reduced.


Enjoy, Chander
SCJP 5, Oracle Certified PL/SQL Developer
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14194
    
  20

Manju, please check your private messages. You can see them by clicking My Private Messages.


Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
mukki pandey
Ranch Hand

Joined: Sep 22, 2008
Posts: 58
please answer in forum rather than sending privaet messages for such good questions

thanks javaranchers
Ankit Garg
Sheriff

Joined: Aug 03, 2008
Posts: 9303
    
  17

mukki, jasper is not giving solutions in private messages. it is some administrative concern...


SCJP 6 | SCWCD 5 | Javaranch SCJP FAQ | SCWCD Links
Arjun Reddy
Ranch Hand

Joined: Nov 10, 2007
Posts: 627
Thanks for replying guys.
Bob Ruth
Ranch Hand

Joined: Jun 04, 2007
Posts: 320
Just to throw it in here.... this is also an example of what you might see called "coding to an interface". For instance, Hashtable, HashMap, TreeMap all implement the Map interface. The Map interface specifies the basic methods required to use a collection that implements map. That said, if you write your code using the methods specified by the interface then, at "run time", that reference variable can hold any collection that implements Map. So any of the above three collection types could be "plugged into" that reference and it would work.


------------------------
Bob
SCJP - 86% - June 11, 2009
 
I agree. Here's the link: http://aspose.com/file-tools
 
subject: Having Interface on the left and Class on the right side