#acl All: == 継承の例 == 前回までに作成した Chainクラス を継承して Cardクラス を作ります。 . {{attachment:card1.png}} Cardクラスのインスタンスは3つの変数(属性)を持ちます。 . {{attachment:card2.png}} コンストラクタとshowメソッドを記述するとこのようになります。 * 1行目にextends...があることに注意 {{{#!java public class Card extends Chain { String suit; int rank; Card() { } Card(String suit, int rank) { this.suit = suit; this.rank = rank; } void show() { System.out.printf("%s %d\n", suit, rank); } } }}} コンストラクタとshowメソッドはこのように使えます。 {{{#!java public static void main(String[] args) { Card a; a = new Card("ハート", 1); a.show(); } }}} ---- === 代入 === 同じ型の変数にそのクラスのインスタンスを代入することができました。 このとき変数の値は、インスタンスのアドレス(参照)になります。 {{{ Card a = new Card(); Chain c = new Chain(); }}} どんなインスタンスでも代入されるときはアドレスだとすると、 型の異なる変数への代入は可能でしょうか? {{{ Card a = new Chain(); Chain c = new Card(); }}} 1番目はエラー、2番目は可能です。 '''親クラスの型をもつ変数へ、サブクラスのインスタンスを代入することはできます。''' 次の2行をmainメソッドに記述して実行してみると {{{ Chain c = new Card(); System.out.println(c); }}} このようになります。 . {{attachment:card4.png}} 変数はChain型ですが、代入されているインスタンスはCard型です。 ---- === オブジェクトをつなぐ === CardクラスはChainクラスを継承して作成したので、 Chainクラスのときと同様につなぐことができます。 . {{attachment:card3.png}} {{{#!java public static void main(String[] args) { Card a; a = new Card(); a.add(new Card("ハート", 13)); a.add(new Card("ハート", 12)); a.showContent(); } }}}