Abstract Classes vs Interfaces

Robert Jacques sandford at jhu.edu
Wed Jul 7 11:38:09 PDT 2010


On Wed, 07 Jul 2010 13:36:16 -0400, Jonathan M Davis  
<jmdavisprog at gmail.com> wrote:

>> 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)
>
> I believe that per TDPL, you would have to call these with eithe  
> c.A.foobar() or
> c.B.foobar() but that c.foobar() is not allowed. If it is allowed at  
> present,
> it's definitely a bug. However, it's a bug in the implementation rather  
> than the
> language spec.
>
> - Jonathan M Davis

TDPL Page 215-216, mentions function hijacking of a final function by the  
implementor, which is listed as an error and detected correctly. Function  
hijacking of static functions by the implementor is not handled correctly.  
It also specifically mentions that c.A.foobar() is not the correct, nor  
ideal syntax. Indeed, it doesn't currently compile.


More information about the Digitalmars-d mailing list