クラス継承の例を次に示します。
class Point {
public x, y ;
method New (x0, y0) { x = x0 ; y = y0 }
method Set (x0, y0) { x = x0 ; y = y0 }
method Move(dx, dy) { x += dx ; y += dy }
}
class MovingPoint : Point {
public vx, vy ;
method SetVelocity (dx, dy) { vx = dx; vy = dy } ;
method MoveOneStep () { x += dx ; y += dy }
}
この例の場合、MovingPointクラスは、Pointクラスに基づいて定義されていま す。これを示しているのが、
class MovingPoint : Point { ....
の部分です。この宣言によって、MovingPointクラスは、Pointクラスに基づい ていることを宣言しています。
MovingPointクラスは、Pointクラスのメンバ変数、メソッドをすべて引き 継ぎ、その上にMovingPointクラスを特徴づけるメンバ、メソッドが定義され ています。
この時、Pointクラスを、MovingPointクラスのスーパークラス、MovingPoint クラスをPointクラスのサブクラスといいます。
MovingPointクラスのMoveOneStepメソッドで参照されているx, yは、Pointク ラスで定義されたメンバです。
上記のクラス定義があるとき、
var aMovingPoint = new MovingPoint ;
aMovingPoint->Set(10, 10) ;
このメソッド呼び出しコードによって、PointクラスのSetメソッドが呼び出さ れ、これによって、Pointクラスで定義されたメンバ x, y にデータがセット されます。
また、下記の式によって、Pointクラスで定義されるpublicメンバ x, y に値を代入することができます。
aMovingPoint->x = 10 ;
aMovingPoint->y = 20 ;
サブクラスのメソッド/秘伝からは、スーパークラスのどのメンバアクセスで きます。つまり、サブクラスからなら、スーパークラスのpublic, private,static,method,hidenのいずれも利用すること ができます12.1。