dataの継承

dataは継承出来る。

data A{
int I1;
}

継承して

data B : A{
int I2;
}

こうすると実際は

data iB{
int I2;
}

data B{
A a;
iB ib;
}

こうなる。

data C : A{
int I3;
}

data D : B,C{}

こうすると

data D{
A a;
iB ib;
iC ic;
}

こうなる。
継承元オブジェクトの代入演算子<-

D d <- 処理してBを返す();

これは
d.a = b.a;
d.ib = b.ib;
これを行う。

同名同型のメンバは一致するものとして扱う。

data A{
int I1;
int Common;
}
  
data B : A{
int I2;
int Common;
}

Commonへの代入は二つに行われる。

b.Common = 1;
↓
b.a.Common = 1;
b.ib.Common = 1;

オブジェクト代入演算子もこれに習う
data C : A{
int I3;
int Common;
}

D d <- 処理してBを返す();
↓
d.a = b.a;
d.ib = b.ib;
d.ic.Common = b.a.Common;


DをBにキャストする処理は

Bを取る関数(d);

B b;
b.a = d.a;
b.ib = d.ib;

Bを取る関数(b)
こういう処理になる。