== クラス ==
指示に従って作図しなさい。<
>
プログラムを実行しないこと。
{{{#!java
public class Card
{
String suit;
int rank;
public static void main(String[] args)
{
Card a, b, c;
a = new Card();
a.suit = "ハート";
a.rank = 12;
b = new Card();
b.suit = "スペード";
b.rank = 3;
c = b;
c.rank = 10;
System.out.println( "aは " + a.suit + a.rank );
System.out.println( "bは " + b.suit + b.rank );
System.out.println( "cは " + c.suit + c.rank );
}
}
}}}
プログラムの構造と、宣言されている変数を図示するとこのようになります。
クラスの中にある2つの変数 suit と rank はこの場所に変数がとられるわけではありません。<
>
インスタンス(そのクラスのオブジェクト)が作成されるときの'''型紙'''として使われます。<
>
角の丸い点線の長方形で囲んで Cardというクラスオブジェクトの型紙であることを示します。
'''クラス'''は型にあたります。<
>
プログラムの8行目の変数宣言では Cardという型(クラス)の変数 a, b, c を準備しています。
{{attachment:card1.png}}
10行目の new Card() が行われると、Cardクラスのオブジェクトが作られます。
先の型紙と同じ形で実体があります。
{{attachment:card2.png}}
これをCard型の変数に代入することで、このオブジェクトやオブジェクト内の変数にアクセスできるようになります。<
>
aのsuitは a.suit 、aのrankは a.rank とピリオドでつないで表します。
{{attachment:card3.png}}
14行目でもうひとつCard型のオブジェクトが作られます。<
>
オブジェクトはいくつでも作ることができます。
{{attachment:card4.png}}
18行目では変数bの値を、変数cに代入しています。
この結果、変数cは変数bと同じ値をもつことになり、同じオブジェクトを参照します。
19行目で c.rank の値を変更しています。
変数cとbは同一のオブジェクトを参照していましたから、
この後で b.rank の値を参照すると、この値も変わっているのが分かります。