Overriding abstract class fields
Basile B. via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Sep 1 04:34:28 PDT 2016
On Thursday, 1 September 2016 at 11:09:18 UTC, slaid wrote:
> I have a snippet:
>
> How do I override this height field?
>
> Thanks
The field height is not overridden. In C you have two "height".
Since your array is of type A[], map takes A.height.
abstract class A
{
int height = 0;
}
class B : A {}
class C : A
{
int height = 1;
}
void main()
{
writeln((new C).height); // prints 0, the height of C
writeln((cast(A)(new C).height); // prints 1, the height of A
}
Only methods are virtual. To solve the problem you can create a
virtual getter:
°°°°°°°°°°°°°°°°°°°°°°
abstract class A
{
int height();
}
class B : A
{
override int height(){return 0;}
}
class C : A
{
override int height(){return 1;}
}
°°°°°°°°°°°°°°°°°°°°°°
But since height is only a field you can just use the same
variable and set the value in the constructor (for example)
°°°°°°°°°°°°°°°°°°°°°°
abstract class A
{
int height;
}
class B : A
{
this(){height = 0;}
}
class C : A
{
this(){height = 1;}
}
°°°°°°°°°°°°°°°°°°°°°°
More information about the Digitalmars-d-learn
mailing list