== クラス ==

クラスでは'''属性'''(性質)と'''動作'''(機能)を定義します。

属性はデータ構造(データの集まり)とも考えられます。

今回はクラスのデータについて説明します。

----
指示に従って作図しなさい。
プログラムを実行しないこと。

{{{#!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 はこの場所に変数がとられるわけではありません。<<BR>>
インスタンス(そのクラスのオブジェクト)が作成されるときの'''型紙'''として使われます。<<BR>>
角の丸い点線の長方形で囲んで Cardというクラスオブジェクトの型紙であることを示します。

'''クラス'''は型にあたります。<<BR>>
プログラムの8行目の変数宣言では Cardという型(クラス)の変数 a, b, c を準備しています。

 {{attachment:card1.png}}

10行目の new Card() が行われると、Cardクラスのオブジェクトが作られます。
インスタンスは型紙と同じ形をした実体です。

 {{attachment:card2.png}}

これをCard型の変数に代入することで、このオブジェクトやオブジェクト内の変数にアクセスできるようになります。<<BR>>
aのsuitは a.suit 、aのrankは a.rank とピリオドでつないで表します。

14行目でもうひとつCard型のオブジェクトが作られます。<<BR>>
オブジェクトはいくつでも作ることができます。

 {{attachment:card3.png}}

18行目では変数bの値を、変数cに代入しています。
この結果、変数cは変数bと同じ値をもつことになり、同じオブジェクトを参照します。

19行目で c.rank の値を変更しています。
変数cとbは同一のオブジェクトを参照していましたから、
この後で b.rank の値を参照すると、この値も変わっているのが分かります。

 {{attachment:card4.png}}