Thread overview
what's different between interface and abstract class?
Mar 16, 2007
Allan QT
Mar 16, 2007
Derek Parnell
Mar 16, 2007
Jesse Phillips
Mar 16, 2007
Allan QT
Mar 16, 2007
Dejan Lekic
Mar 19, 2007
Knud Soerensen
March 16, 2007
Thanks for your attention!


March 16, 2007
On Fri, 16 Mar 2007 11:19:16 +0800, Allan QT wrote:

> Thanks for your attention!

I'm an amateur at this so someone please tweak/correct my offering.

The differences include the fact that abstract classes can specify data members and 'default' function bodies whereas interfaces cannot do that. Also, the members of an interface *must* be implemented in the class that is based on that interface but this is not a requirement for abstract classes that have 'default' function bodies.

I think that apart from those differences they are essentially the same though I suspect they are implemented differently.


-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Justice for David Hicks!"
16/03/2007 3:00:44 PM
March 16, 2007
On Fri, 16 Mar 2007 15:22:54 +1100, Derek Parnell wrote:

> On Fri, 16 Mar 2007 11:19:16 +0800, Allan QT wrote:
> 
>> Thanks for your attention!
> 
> I'm an amateur at this so someone please tweak/correct my offering.
> 
> The differences include the fact that abstract classes can specify data members and 'default' function bodies whereas interfaces cannot do that. Also, the members of an interface *must* be implemented in the class that is based on that interface but this is not a requirement for abstract classes that have 'default' function bodies.
> 
> I think that apart from those differences they are essentially the same though I suspect they are implemented differently.
> 
>

Yes, the interface is just a way of saying that what implements me can do these things [...]. So there are data values, and only method signatures. An abstract class provides a base structure, but since the class is too "abstract" (not the entire concept) it can not have an instance.

Abstract example:
Classic example is the shape class, all shapes have at least one dimension
(circle has a radius, square a length), color. All shapes can be drawn,
but you can't draw a shape. You must know what the shape is before it can
be drawn, and thus shape is an abstract concept.

Interface example:
Server interface, with this you could say that a server can wait for a
connection, that it can receive and send a package. But depending on the
server you don't know how or what connection it is waiting for, what will
be in the packages, and you don't know what information the server will be
holding. So all you can say about it is that a server:

Socket connect(Socket foo);
Package send();
void receive(Package bar);

Hope this helped to explain it.
March 16, 2007
Thanks for your patient answers!
And at last I find their both definitions in digitalmars.com
As a return I would like conclude as following:

        1, interface: is like C++ abstract base class, but it's all member
function must be pure virtual function.

        2, abstract: is an attribute that to instruct a class cannot be
instantiate directly, but can be another class's base class.
                          beside this, the class with abstract attribute
just like normal class.

            a class can be abstract:
                         1), declare it with abstract  attribute;
                         2), declare it's any member function(s) with
abstract attribute.

Best regards.


"Jesse Phillips" <Jesse.K.Phillips+Digitalmars@gmail.com> дÈëÏûÏ¢ÐÂÎÅ:etdak9$22hi$1@digitalmars.com...
> On Fri, 16 Mar 2007 15:22:54 +1100, Derek Parnell wrote:
>
>> On Fri, 16 Mar 2007 11:19:16 +0800, Allan QT wrote:
>>
>>> Thanks for your attention!
>>
>> I'm an amateur at this so someone please tweak/correct my offering.
>>
>> The differences include the fact that abstract classes can specify data members and 'default' function bodies whereas interfaces cannot do that. Also, the members of an interface *must* be implemented in the class that is based on that interface but this is not a requirement for abstract classes that have 'default' function bodies.
>>
>> I think that apart from those differences they are essentially the same though I suspect they are implemented differently.
>>
>>
>
> Yes, the interface is just a way of saying that what implements me can do these things [...]. So there are data values, and only method signatures. An abstract class provides a base structure, but since the class is too "abstract" (not the entire concept) it can not have an instance.
>
> Abstract example:
> Classic example is the shape class, all shapes have at least one dimension
> (circle has a radius, square a length), color. All shapes can be drawn,
> but you can't draw a shape. You must know what the shape is before it can
> be drawn, and thus shape is an abstract concept.
>
> Interface example:
> Server interface, with this you could say that a server can wait for a
> connection, that it can receive and send a package. But depending on the
> server you don't know how or what connection it is waiting for, what will
> be in the packages, and you don't know what information the server will be
> holding. So all you can say about it is that a server:
>
> Socket connect(Socket foo);
> Package send();
> void receive(Package bar);
>
> Hope this helped to explain it.
> 


March 16, 2007
Allan, think of interfaces as a "contract" betwen a programmer and user of the class, which states that a certain class (which implements the interface) MUST have certain methods declared in the interface.
Thus interface contains only SIGNATURES of methods that the class must implement.

Class, however is, simply said, a template for making objects. It contains members' and methods' definitions.
March 19, 2007
On Fri, 16 Mar 2007 11:19:16 +0800, Allan QT wrote:

> Thanks for your attention!

I think that in practise the difference is that
your get better data hidden and scalability using
an interface than from an abstract class.