On Wed, 07 Jul 2010 07:24:15 -0400, Justin Johansson <[email protected]> wrote:

Currently I'm struggling with unifying some C++ and Java code with
the idea that I might eventually port it to D2.

C++ people will know that their language supports abstract classes
and multiple inheritance but not interfaces per se (although they
can be hacked as abstract classes with implicit/trivial constructors).

Java people will know that their language also supports abstract
classes and interfaces though not multiple inheritance.

In respect of the support of abstract classes, multiple inheritance
and interfaces, both D1 and D2 are closer to Java than C++.

May I please ask of this group their opinions as to the difference
between abstract classes and interfaces from an axiomatic viewpoint.

Is there a difference axiomatically, semantically or otherwise?

Thanks in advance for all comments,

Justin Johansson

Axiomatically, an interface can be thought of an abstract class without any field or method definitions. In D2, interfaces now support contracts and static/final methods. The real issues is that there are a host of well known multiple-inheritance problems with abstract classes once you move beyond virtual function (i.e. beyond interfaces). For example, It seems that D2's interface functions have inherited some of these issues. Consider the following:

interface A { final void foobar() { writeln("A"); } }
interface B { final void foobar() { writeln("B"); } }

class C : A, B {}

void main(string[] args) {

    C c = new C;
    c.foobar;

}

What does foobar print?
(This has been filed as bug 4435: http://d.puremagic.com/issues/show_bug.cgi?id=4435)

Reply via email to