Javaでオブジェクト指向をマスターしよう!-クラス編-
前回はオブジェクト指向の基本的な用語を押さえました。
ここからは一つ一つ詳細に解説します。まずは「クラス」と「インスタンス」について。クラスとインスタンスはオブジェクト指向の基本の「き」です。スムーズに先へ進めるようにしっかりと覚えましょう。
なお、以下の実行環境を前提にしています。
OS:Windows 10 Pro
IDE:Eclipse 4.8 Photon(Pleiades)
Java:Java8
目次
1.クラス(Class)
オブジェクト指向言語では、一つ一つのモノ(オブジェクト)を設計する必要があります。クラスはオブジェクトを設計するための設計図です。
(1)クラスの例
クラスの例を見てみましょう。次のクラスは実在する「サイコロ」のクラスです。
//クラス
class Dice {
//メンバ
int number; //サイコロの目
String color; //色
String name; //名前
int maxNumber; //サイコロの最大数
//コンストラクタ
Dice(int number, String color, String name, int maxNumber) {
this.number = number;
this.color = color;
this.name = name;
this.maxNumber = maxNumber;
}
//サイコロを振る
void play() {
number = (int)(Math.random() * maxNumber) + 1;
}
//サイコロの目を確認する
int getNumber() {
return number;
}
}
Diceという名前でクラスを作成しています。「出目(number)」「色(color)」「名前(name)」「最大数(maxNumber)」のフィールド(属性)があり、「サイコロを振る(play)」「サイコロの目を確認する(getNumber)」メソッド(操作)が定義されています。
オブジェクト指向では基本的に、フィールドの値はメソッドで変えます。上の例ではplay()メソッドを呼び出すことでnumber変数を操作します。これはサイコロを振ることで出目を変えるということ。Diceクラスは「実際にあるサイコロの特徴を定義」しています。
(2)クラスの作成
では実際にクラスを作成してみましょう。今回は「人間」をクラス上に設計してみましょう。Eclipseで新規クラスを作成してください。その際クラス名を「human」にします。すると次のコードが自動生成されます。
public class Human {
}
これでHumanクラスが作成されました。クラス名をHumanにすることで、「Human.java」クラスが作成されています。新しくクラスを作成するとファイル名とクラス名が一緒になります。
次にフィールドを追加しましょう。人間はキリがないほど属性だらけですが、今回は「名前」「身長」「体重」「年齢」の属性を定義します。
public class Human {
String name; //名前
double height; //身長
double weight; //体重
int age; //年齢
}
これらは人間が基本的に持っている属性を抽出した属性です。
今度はメソッドを追加しましょう。名前や身長を聞いたら答えれくれる操作を定義します。
public class Human {
(中略)
String teachName() {
return "私の名前は" + name + "です。";
}
String teachHeight() {
return "私の身長は" + height + "センチです。";
}
String teachWeight() {
return "私の体重は" + weight + "キロです。";
}
String teachAge() {
return "私は" + age + "歳です。";
}
}
これで名前や身長を聞いたら答えてくれるようになりました。しかし、このままだとフィールドの値が初期化されていないので、期待した答えが返ってきません。例えば名前を聞くために「teachName()」メソッドを呼ぶと「私の名前はnullです」と返却されます。これはString型のフィールドを明示的に初期化しない場合は、暗黙的に「null」で初期化するからです。フィールドの初期化については次回学習します。
2.まとめ
今回はクラスについて学びました。クラスはオブジェクトの設計図であることを認識することが最も重要です。
次回は今回作ったHumanクラスを元に、インスタンスについて学習していきます。インスタンスはクラスと対照的な存在なので、インスタンスを知ることでよりクラスの意味が理解できるようになるかと思います。