解説資料

クラスメソッドとインスタンスメソッドの比較
次のような Dog クラスと、Dog クラスのインスタンスを生成するサンプルコードがある。
class Dog {
String name; // 名前
int age; // 年齢
}
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "taro";
dog.age = 2;
}
}
インスタンスの名前と年齢情報を出力する方法を考えてみよう。
■ クラスメソッドを使用する場合
class Dog {
String name; // 名前
int age; // 年齢
}
public class Example {
public static void printDogInfo(Dog d) {
System.out.println("名前:" + d.name);
System.out.println("名前:" + d.age);
}
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "taro";
dog.age = 2;
printDogInfo(dog);
}
}
■ インスタンスメソッドを使用する場合
class Dog {
String name; // 名前
int age; // 年齢
void printInfo() {
System.out.println("名前:" + this.name);
System.out.println("名前:" + this.age);
}
}
public class Example {
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "taro";
dog.age = 2;
dog.printInfo();
}
}
■ 考えてみよう
クラスメソッドでもインスタンスメソッドでも、どちらでも同じことを実現できる。
それぞれ、プログラムの作り方に対する考え方が違う。
・クラスメソッドを使う選択をする場合
Example クラスのコードを書いた人が Dog クラスの構造についても十分に理解してい
る。Dog クラスは単に情報を持つための入れ物として使用する。Dog インスタンスに固有
の情報に対する処理も、すべて Example クラス内で実行する。
・インスタンスメソッドを使う選択をする場合
Example クラスのコードを書く人は、Dog クラスの構造について十分に理解していなく
ても構わない。Dog クラスの情報の出力の仕方は、Dog クラスのコードを書く人に任せる。
Example クラスを書く人は、Dog クラスの printInfo メソッドを呼ぶだけで良い(実行
したい処理のメソッド名を知っているだけで良い。中身がどうなっているかは意識せずに
すむ)
。Dog の持つ情報が Example クラスを書く人と、Dog クラスを書く人で、役割分担
しやすい。
※ 次のような状況を想像しよう。
「Dog クラスには性別の情報も持たせることにしよう。printInfo メソッドでは性別
情報も出力させることにしよう。」
このような変更に柔軟に対応できるのはどちらだろうか。