posted 15 years ago
Abstract classes are classes that cannot logically create instances. Things that does not make sense if they have instances, for example a Shape. Ask your self what this means "new Shape()"? How can you create a shape without knowing what kind of shape it is. But you can surely do this "new Circle()" because circles are concrete enough.
Most of the time (if not all), abstracting a class is done to allow the sharing of invocational interface (those fields/methods). For example, Shape can draw so all shapes must have "void draw(Canvas C)" method. This way, all of the more-concrete classes that can draw may "inherit" or "extend" the class Shape so that we can ask it to draw without knowing if it is a circle or square (as soon as we know it is a Shape).
Interfaces are a special kind of abstract classes. There are two aspects of Interface that we should consider.
First an Interface is an abstract class WITHOUT any implementation. This means that there is no functionality given when a class "realise" or "implement" an interface.
To understand this, we should see why a class (not interface) may be abstract in the first place. For example, Shape is a class that have an abstract method "draw(...)". This method is abstract because THERE IS NO WAY TO KNOW HOW TO DRAW WITHOUT KNOWING WHAT SHAPE THIS IS. BUT, Shape (as an abstract class) CAN have other methods that is NOT abstract for example "void drawLine(...)". This method can be non-abstract because, we an create a LOGICAL IMPLEMENTATION of this method.
By making Shape an ABSTRACT CLASS allows us to share an invocation interface (method "draw()") as well as the implementation (method "drawLine(...)"). This implies that, draw() method of each shape will always differ depending on what type of shape this is while drawLine() is likely to be the same as it derived from Shape (share functionality).
In case, of an Interface, since there is no functionality, the implementation of an interface only inherit the invocational interface of it. For example, an Interface "Drawable" have a method "draw(...)".
From here, you may ask "So an interface is an all-abstract-method class? why bother have another name?". This is how the second aspect come in so keep going ...
The second aspect of an Interface (the most important of all) is that "Java does not allows multiple inheritance". This means that you cannot create a class which inherits "invocation interface" and functionality from more than one class. This because doing so can create confusion (Google "Diamond inheritance") as the shared functionalities from those inherited classes may not get along. But multiple inherit of "invocation interface" is very useful or even required in some cases so Interface is created as a way to allows "multiple inheritance of invocation interface" without "multiple inheritance of functionality".
So, a class can inherit from only one class (inherit the invocation interface as well as some functionality) and it can implements multiple Interfaces (inherit all of those Interfaces' "invocation interface"). An example is Circle inherit Shape and implements Comparable.
I am not a native tougne so please forgive me for my inconcise explanation.
Hope this help though.
NawaMan