導入
「たい焼きの型」と「焼きあがったたい焼き」。型は1つでも、そこから何個でもたい焼きが作れます。クラスとインスタンスの関係は、まさにこれです。
説明
クラス はデータと処理をまとめた「設計図」、インスタンス はその設計図から作られた「実体」です。
public class Main {
public static void main(String[] args) {
Dog pochi = new Dog(); // Dog の設計図からインスタンスを作る
pochi.name = "ポチ";
pochi.bark();
Dog taro = new Dog(); // 別のインスタンス(別の実体)
taro.name = "タロー";
taro.bark();
}
}
class Dog {
String name; // フィールド(属性・データ)
void bark() { // メソッド(振る舞い・処理)
System.out.println(name + "「ワン!」");
}
}
class Dog { ... }…Dogというクラス(設計図)の定義。String name;… フィールド。インスタンスが持つデータ(ここでは名前)です。void bark() { ... }… メソッド。インスタンスができる処理(ここでは吠える)です。new Dog()… 設計図からインスタンスを 生成 します。pochiとtaroは別々の実体なので、それぞれのnameは独立しています。pochi.namepochi.bark()….(ドット)で、インスタンスのフィールドやメソッドにアクセスします。
同じ Dog クラスから作っても、pochi と taro はそれぞれ自分の name を持ちます。ここがクラス(1つの設計図)とインスタンス(複数の実体)の関係の肝です。
やってみよう
下のエディタを実行して、2匹の犬がそれぞれの名前で吠えることを確かめましょう。3匹目の Dog を作って吠えさせてみてください。
演習
Cat というクラスを作り、String name フィールドと、name + "「ニャー」" と表示する meow() メソッドを持たせてください。main でインスタンスを作り、名前を "ミケ" にして meow() を呼び、ミケ「ニャー」 と表示してください。
ヒント1を見る
Dog クラスをまねて class Cat { String name; void meow() { ... } } を書きます。
ヒント2を見る
main で Cat c = new Cat(); c.name = "ミケ"; c.meow();。