It's not a secret anymore!
The moose likes OO, Patterns, UML and Refactoring and the fly likes Interfaces vs Abstract Classes Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Engineering » OO, Patterns, UML and Refactoring
Bookmark "Interfaces vs Abstract Classes" Watch "Interfaces vs Abstract Classes" New topic

Interfaces vs Abstract Classes

victor kamat
Ranch Hand

Joined: Jan 10, 2007
Posts: 247
I am trying to wrap my mind around these two entities. What are their advantages and disadvantages. Where is one appropriate and where the other. What are the advantages that Interfaces bring with them to designing code and classes.

Can somebody guide me to some good source ( book/website ).

I have explored the web and books but nothing truly satisfactory has come my way.
arulk pillai
Ranch Hand

Joined: May 31, 2007
Posts: 3371
Abstract Class

In design, you want the base class to present only an interface for its derived classes. This means, you don�t want anyone to actually instantiate an object of the base class. You only want to upcast to it (implicit upcasting, which gives you polymorphic behavior), so that its interface can be used. This is accomplished by making that class abstract using the abstract keyword. If anyone tries to make an object of an abstract class, the compiler prevents it.


The interface keyword takes this concept of an abstract class a step further by preventing any method or function implementation at all. You can only declare a method or function but not provide the implementation. The class, which is implementing the interface, should provide the actual implementation. The interface is a very useful and commonly used aspect in OO design, as it provides the separation of interface and implementation and enables you to:

Capture similarities among unrelated classes without artificially forcing a class relationship.
Declare methods that one or more classes are expected to implement.
Reveal an object's programming interface without revealing its actual implementation.
Model multiple interface inheritance in Java, which provides some of the benefits of full on multiple inheritances, a feature that some object-oriented languages support that allow a class to have more than one superclass.

Q. When to use an abstract class?: In case where you want to use implementation inheritance then it is usually provided by an abstract base class. Abstract classes are excellent candidates inside of application frameworks. Abstract classes let you define some default behavior and force subclasses to provide any specific behavior. Care should be taken not to overuse implementation inheritance as discussed in Q10 in Java section.

Q. When to use an interface?: For polymorphic interface inheritance, where the client wants to only deal with a type and does not care about the actual implementation use interfaces. If you need to change your design frequently, you should prefer using interface to abstract. CO Coding to an interface reduces coupling and interface inheritance can achieve code reuse with the help of object composition. For example: The Spring framework�s dependency injection promotes code to an interface principle. Another justification for using interfaces is that they solve the �diamond problem� of traditional multiple inheritance as shown in the figure. Java does not support multiple inheritance. Java only supports multiple interface inheritance. Interface will solve all the ambiguities caused by this �diamond problem�.

Design pattern: Strategy design pattern lets you swap new algorithms and processes into your program without altering the objects that use them.

Look at Q10 & Q12 in the following dowbload:

Free Q&A download

[ June 13, 2007: Message edited by: arulk pillai ]
[ June 13, 2007: Message edited by: arulk pillai ]

[] | [Java job hunting know how] | [Java resumes]
victor kamat
Ranch Hand

Joined: Jan 10, 2007
Posts: 247
Thanks Arulk. Your response has given me much to chew on.
Ilja Preuss

Joined: Jul 11, 2001
Posts: 14112
Also take a look at

The soul is dyed the color of its thoughts. Think only on those things that are in line with your principles and can bear the light of day. The content of your character is your choice. Day by day, what you do is who you become. Your integrity is your destiny - it is the light that guides your way. - Heraclitus
Peter Rooke
Ranch Hand

Joined: Oct 21, 2004
Posts: 817

good source - Item 16: Prefer interfaces to abstract classes in Effective Java Programming Language Guide [Bloch]. Covers this topic from a Java perspective.

This is also a popular interview question

Regards Pete
steve souza
Ranch Hand

Joined: Jun 26, 2002
Posts: 862
Also sometimes people ask the question like there has to be a choice between Interfaces or Abstract classes. They can both be used to good effect in the same heirarchy. - a fast, free open source performance tuning api.
JavaRanch Performance FAQ
I agree. Here's the link:
subject: Interfaces vs Abstract Classes
It's not a secret anymore!