I presume your intent is to have B inherit the implementation
from A. There are two options.
If you control class A and its appropriate to declare the
interface there, you can declare that A implements I and have B
simply inherit it from A.
class A : I {
int f(int x) { return x; }
}
interface I { int f(int x); }
class B : A { }
void main() {
writeln(new B().f(7));
}
If you only intend to introduce the interface on B, you still
need to provide an implementation for I, either voluntarily
overriding A or providing an alternate implementation to the
virtual interface. To do the former, you can do the following:
class A {
int f(int x) { return x; }
}
interface I { int f(int x); }
class B : A, I {
override int f(int x) { return super.f(x); }
}
void main() {
writeln(new B().f(7));
}
On Wednesday, 25 December 2013 at 07:40:03 UTC, Øivind wrote:
Why doesn't this work:
----
class A {
int f(int x) {
return x;
}
}
interface I {
int f(int x);
}
class B : A, I {
}
void main() {}
----
I get the following error with DMD 2.064.2:
/d122/f338.d(11): Error: class f338.B interface function 'int
f(int x)' is not implemented