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