welcome: please sign in

"継承"のようなページがひとつ見つかりました。リダイレクトします。

メッセージを消す
location: 継承の例

継承の例

前回までに作成した Chainクラス を継承して Cardクラス を作ります。

Cardクラスのインスタンスは3つの変数(属性)を持ちます。

コンストラクタとshowメソッドを記述するとこのようになります。

コンストラクタとshowメソッドはこのように使えます。


代入

同じ型の変数にそのクラスのインスタンスを代入することができました。

このとき変数の値は、インスタンスのアドレス(参照)と考えられます。

どんなインスタンスでも代入されるときはアドレスだとすると、 型の異なる変数への代入は可能でしょうか?

1番目はエラー、2番目は可能です。

親クラスの型をもつ変数へ、サブクラスのインスタンスを代入することはできます。

次の2行をmainメソッドに記述して実行してみると

このようになります。

変数はChain型ですが、代入されているインスタンスはCard型です。


オブジェクトをつなぐ

CardクラスはChainクラスを継承して作成したので、 Chainクラスのときと同様につなぐことができます。

変数nextへの代入によってつなぐことも可能ですが、 以下ではメソッドを使って操作することにします。

Chainクラスで作成したaddとdelの2つのメソッドは 図の青で囲んだ部分に対して、追加や削除を行うものでした。

親クラスで定義されているメソッドはサブクラスでも利用できます。

ここでもChain型の変数nextにサブクラスCardのインスタンスが代入されます。

このmainメソッドを実行するとこのようになります。

1番目のインスタンスの変数suitとrankには値が代入されていないことに注意してください。

2番目以降につながっているインスタンスだけをリストの内容として扱うことにします。

このため、表示にはshowContentを使っています。


オブジェクトをつなぎなおす

変数bがこのようになっているとします。

先頭のインスタンスだけがあり、 リストの内容に対応するインスタンスはつながっていない状態です。

を行うとこの状態になります。

問題