welcome: please sign in
location: "継承の例"の差分
10と11のリビジョン間の差分
2010-11-30 13:38:47時点のリビジョン10
サイズ: 2679
編集者: masahiko
コメント:
2010-11-30 13:41:15時点のリビジョン11
サイズ: 2861
編集者: masahiko
コメント:
削除された箇所はこのように表示されます。 追加された箇所はこのように表示されます。
行 96: 行 96:
ここでもChain型の変数nextにサブクラスCardのインスタンスが代入されます。

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

継承の例

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

  • card1.png

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

  • card2.png

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

  • 1行目にextends...があることに注意
       1 public class Card extends Chain
       2 {
       3         String suit;
       4         int rank;
       5 
       6         Card()
       7         {
       8         }
       9 
      10         Card(String suit, int rank)
      11         {
      12                 this.suit = suit;
      13                 this.rank = rank;
      14         }
      15 
      16         void show()
      17         {
      18                 System.out.printf("%s %d\n", suit, rank);
      19         }
      20 }
    

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

  •    1         public static void main(String[] args)
       2         {
       3                 Card a;
       4                 
       5                 a = new Card("ハート", 1);
       6                 a.show();
       7         }
    


代入

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

このとき変数の値は、インスタンスのアドレス(参照)になります。

  •         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);

このようになります。

  • card4.png

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


オブジェクトをつなぐ

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

  • card3.png

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

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

  • chain51.png

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

  •    1         public static void main(String[] args)
       2         {
       3                 Card a;
       4                 a = new Card();
       5                 
       6                 a.add(new  Card("ハート", 13));
       7                 a.add(new  Card("ハート", 12));
       8                 a.showContent();
       9         }
    

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

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

  • card5.png


継承の例 (最終更新日時 2010-12-01 00:36:10 更新者 masahiko)