"The last feature": overridable methods in interfaces
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Mon Feb 8 04:58:30 PST 2010
Lars T. Kyllingstad wrote:
> Andrei Alexandrescu wrote:
>> Walter has now implemented final methods in interfaces and also
>> contracts in interfaces, both of which I think are just awesome.
>>
>> We figured that essentially he artificially disallows interfaces from
>> providing bodies for methods. I think that's a gratuitous limitation;
>> the only distinguishing quality of an interface is that it has no
>> state. Other than that, interfaces can always offer overridable
>> functions that by default offer functionality in terms of existing
>> interface functions. For example:
>>
>> interface Stack(T)
>> {
>> void push(T);
>> void pop();
>> @property ref T top();
>> @property bool empty();
>> T belowTop()
>> {
>> auto t = top;
>> pop();
>> auto result = top;
>> push(t);
>> }
>> }
>>
>> The default implementation of belowTop does a fair amount of work. A
>> particular implementation might just use that or override it with a
>> more efficient implementation.
>>
>> Many more examples can be imagined, but I'm looking for a killer one,
>> or perhaps a killer counterexample (e.g. when would an
>> interface-defined method be really bad?)
>>
>> Your thoughts welcome.
>
> What happens when two interfaces implement the same method?
Ambiguity error.
> I thought
> multiple subtyping without multiple inheritance was the raison d'être
> for interfaces.
Interfaces do foster multiple inheritance!
Andrei
More information about the Digitalmars-d
mailing list