
これまでの章では、変数や配列など、さまざまなjavaの機能について学んできました。このような知識を使えば、いろいろなプログラムを自由に作成することができます。
たとえば、カードゲームのカードを管理するプログラムを考えてください。カードのキャラクターの属性を配列であらわすことができます。属性を画面に出力することもできます。
しかし、カードゲームに関する多種多様なプログラムを作成しないといけません。このような時、これまでに作成したコードを効率よく生かしていくことが大切です。
この章で学ぶクラスという仕組みを使うと、プログラムを効率よく作成していくことができます。
クラスのしくみを知る
クラスを扱うときには、現実の世界に存在する、「モノ」の概念に着目していきます。たとえば、「キャラクター」といったモノに着目し、プログラムを作成することを考えてみることにします。
キャラクターは、火や水といった属性をもち、25や37といった体力もあります。このとき、「キャラクター」に関するデータとして、次のようなものを考えることができるでしょう。
- 属性
- 体力の残量
「キャラクターの属性は○○である」「体力は残り○○である」といった「キャラクター」一般に関することがらを「キャラクタークラス」に取り入れていきます。これらのデータは、いわばキャラクターの「性質」のようなものだと考えることができます。
この他にもキャラクターには、次のような「機能」があります。
- キャラクターの属性を決める
- キャラクターの体力を回復させる
- 属性や体力を表示する
これらの「機能」は、キャラクターの属性や体力などを変更したりするものといえます。クラスとは、このような
モノの性質や、それにかかわる機能をまとめながら、プログラムを作成していくために使う概念です。
クラスを宣言する
モノの性質や機能をまとめたクラスを記述することを、クラスを宣言するといいます。
クラスの名前は自分で選んでつけます。たとえば、Character「キャラクター」などといった名前をつけることができます。
- フィールド … クラスの「性質」をあらわすしくみ。
- メソッド … クラスの「機能」をあらわすしくみ。メソッドに関してはこの章の後半に学びます。
- メンバー … フィールドとメソッドをあわせたもの
class Character{
String zokusei;//キャラクターは属性をもちます
int tairyoku;//キャラクターは体力をもちます
}
ブロックの中で、zokuseiやtairyokuといった変数を宣言しています。これが「フィールド」です。これからフィールド(変数)に属性や体力を格納していきます。
クラスを利用するということは
フィールドをまとめて、クラスを宣言してみました。しかし、宣言しただけでは不十分です。
「キャラクター」というモノが実際にどんな属性や体力をもつか
といったことは何も記述していません。実際にキャラクターは火といった具体的な属性をもちます。これについてまだ何も決まっていません。
そこで必要になるのが、オブジェクトの作成という作業です。オブジェクトの作成とは、
実際に一人のキャラクターをつくる
というイメージを思い浮かべるとよいかもしれません。「キャラクター」がどのような「性質」をもつかクラスとして宣言しました。これからクラスの仕様を利用して、実際にコード上で一人ずつキャラクターを作成していくのだ、と考えてみてください。
コード上で作成されるキャラクターのことを、オブジェクトまたはインスタンスと呼びます。
オブジェクトを作成する
実際オブジェクトを作成するコードには、以下の2つの手順が必要になります。
- オブジェクトを扱う変数を宣言する
- オブジェクトを作成し、その変数で扱えるようにする
1の作業についてみてみましょう。これは、
宣言したクラスを使って、オブジェクトを扱う変数を宣言する
ということを意味します。第3章などで、int型やdouble型の変数を宣言したことを思い出してください。1の作業は、このような変数を宣言する方法とほぼ同じです。これまでint型やdouble型としてきた型名の部分に、クラス名を使えばよいのです。
Character char1; Character型の変数char1を宣言します
これがCharacterクラスのオブジェクトを扱う「変数char1」を用意する文です。変数char1は、「Character型の変数」と呼ばれます。
次に、2の作業についてみてみましょう。newという演算子を使い、Characterクラスのオブジェクトをコード上に作成します。
char1 = new Character(); オブジェクトを作成して変数char1に代入します。
この文では、同時に「newを使った結果を変数char1に代入する」という作業をしています。この代入をすると、
変数char1を使って、作成したCharacterクラスのオブジェクトを扱うことができる
ようになるのです。このことを、変数char1はCharacterクラスのオブジェクトをさす、ということもあります。
オブジェクトの作成方法についてまとめると、次のようになります。2つの作業が必要です。
オブジェクトの作成(その1)
クラス名 変数名;
変数名 = new クラス名();
なお、1と2の作業をまとめて、1つの文にすることもできます。
Character char1 = new Character();
メンバにアクセスする
それでは、作成したオブジェクトを利用して、さらにコードを記述していくことにしましょう。Characterクラスのオブジェクトを1つ作成すると、
キャラクター一人の属性や体力の値を設定する
という作業ができるようになります。作成したオブジェクトは、zokusei、tairyokuという値を格納できるフィールド(変数)をもちます。そこで、このフィールドに実際の値を代入すればよいのです。
フィールドに値を代入するには、オブジェクトをさす変数名にピリオド(.)をつけて、フィールドを指定します。
char1.zokusei 属性をあらわします
char1.tairyoku 体力をあらわします
char1の属性を火とし、体力を25とするには、次のように代入します。
char1.zokusei = ’火’; 属性を代入します
char1.tairyoku = 25; 体力を代入します
このように、フィールドを扱うことを、メンバ(フィールド)にアクセスするといいます。
クラスの宣言、オブジェクトの作成について説明してきました。実際に動作する、コードを入力していきましょう。

最初にCharacterクラスが書かれていますが、プログラムの実行はこれまでと同じようにmain()メソッドから処理が始まります。
main()メソッドでは、Characterクラスのオブジェクトを作成しています。次にフィールドに値を格納し、属性と体力を設定します。その後でzokuseiとtairyokuの値を出力しています。
これで、キャラクターを管理する簡単なプログラムを作成することができました。
2つ以上のオブジェクトを作成する
オブジェクトはいくつでも作成することができます。たとえば、二人のキャラクターを作成するには、変数char1のほかにchar2を準備してnewを使えばよいのです。
すると、二人の「キャラクター」は、それぞれの独自の属性や体力をもつことになります。なお、char1、char2は変数名ですから、別の適当な名前をつけてもかまいません。
クラスを利用する手順のまとめ
- クラスを宣言する
- クラスからオブジェクトを作成する
1の「クラスを宣言する」という作業は、
「キャラクターに関する一般的な仕様」(クラス)を設計するという作業です。
一方、2の「オブジェクトを作成する」という作業は、その仕様(クラス)をもとにして、
「個々のキャラクター」(オブジェクト)を作成し、データを記憶したり操作したりするという作業です。
Javaでは、この2つのコードを2つのファイルに分割し、別々の人間が記述することもできます。1の段階でCharacterクラスをうまく設計しておくと、たいへん便利です。そのCharacterクラスを利用すれば、「キャラクター」を扱うさまざまなプログラムを、別の人間が効率よく作成していけるからです。
この方法については別の章で詳しく学ぶことにしましょう。