nested class inheritance
Era Scarecrow
rtcvb32 at yahoo.com
Fri Jul 13 15:15:39 PDT 2012
On Friday, 13 July 2012 at 20:04:43 UTC, Gor Gyolchanyan wrote:
> On Fri, Jul 13, 2012 at 11:59 PM, Era Scarecrow
>> or perhaps...?
>>
>> interface Seed{}
>> interface Fruit{}
>>
>> //Apple knows it's a fruit..
>> class Apple : Fruit {
>> //Appleseed is from the Apple (which is a fruit as well)
>> //Appleseed is a seed, we can have multiple seeds from
>> Apple, all which
>> know
>> //all about Apple's (and basic fruits) but not about
>> non-appple seeds.
>> class Appleseed : Seed {
>> }
>> }
>>
>
> The seed itself must have private state, or else it would
> violate encapsulation and require nasty mixins.
> And as I said, fruit can't know about apple.
Fruit doesn't know about apples in this last case, only that an
apple IS a fruit (And can do anything a fruit can do). And the
seed CAN have a private state, only part of the interface (from
interface Seed) is exposed. So I do not see a problem.
interface Seed {
void func();
}
class Appleseed : Seed {
int x; //private state
void func() {x++;}
}
Appleseed a = new Appleseed();
Seed s = cast(Seed) a;
//appleseed
a.func();
a.x = 5;
//seed
s.func(); //known and callable
s.x = 10; //error, x isn't defined or known in seed. How is this
not private state?
More information about the Digitalmars-d
mailing list