Java のクラス定義の基本
Java のクラス定義
最も基本的なクラス定義は次のようになります。
class クラス名 {
// ここにフィールド、コンストラクタ、メソッドを書く
}
継承するクラス、実装するインターフェイスがある場合は次のように書きます。
class クラス名 extends スーパークラス implements インターフェイス {
// ここにフィールド、コンストラクタ、メソッドを書く
}
スパークラスはひとつだけ指定できます。インターフェイスはカンマで区切り複数指定できます。
それでは、具体的な例として「人」を表す Person クラスというのを実装してみましょう。
public class Person {
// フィールド
private int age;
private String name;
// コンストラクタ
public Person(int age, String name) {
this.age = age;
this.name = name;
}
// メソッド
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Person クラスには、年齢を表す age フィールド、名前を表す name フィールドがあります。 コンストラクタで age と name を初期化することもできますし、それぞれのアクセサメソッドで値を設定、取得することもできます。
メソッドは可変個の引数を受け取ることもできます。詳しくは「Java の可変個引数のメソッド」をみてください。
Java のコンストラクタ
コンストラクタはクラスのオブジェクトを生成するときに呼ばれる特別なメソッドです。 コンストラクタにパラメータを渡すことで、オブジェクト生成時にオブジェクトを初期化できます。
クラス名と同じ名前のメソッドとして定義します。
上で作った Person クラスを継承して従業員 (Employee) クラスを定義しましょう。 従業員クラスには従業員 ID という属性を持たせましょう。
public class Employee extends Person {
private int employeeID;
public Employee(int age, String name, int employeeID) {
super(age, name);
this.employeeID = employeeID;
}
public int getEmployeeID() {
return this.employeeID;
}
public void setEmployeeID(int employeeID) {
this.employeeID = employeeID;
}
}
従業員 (Employee) は人 (Person) です。そのため、Employee は Person を継承しています (「is-a の関係」といいます)。 Employee クラスは Person クラスよりも、従業員 ID というデータが増えているにもかかわらず、 Person クラスよりもコードは短くなっています。
コンストラクタの中で、super という特別なメソッドを呼び出しています。これはスーパークラスのコンストラクタを呼び出すためのものです。
Employee クラスのスーパークラスは Person クラスですから、 super(age, name) とすると、 Person クラスのコンストラクタ Person(int age, String name) を呼び出したことになります。
パラメータ違いの複数のコンストラクタを実装することもできます。
あるコンストラクタから、他のコンストラクタを呼ぶ場合は、 this(パラメータ, ...) を使います。
変数の初期化に関してもう少し詳しく知りたい方は、「変数の初期化」 をお読みください。
Java のメソッド定義
オブジェクトの動作を表すメソッドは、次の形式で書きます。
アクセス修飾子 戻り値の型 メソッド名(パラメータリスト) {
// メソッド本体
return 戻り値; // 戻り値がある場合
}
アクセスの修飾子には次の種類があります。
修飾子 | 意味 |
---|---|
public | 外部からの呼び出しを許可 |
private | クラス内でのみ呼び出し可能 |
protected | 派生クラスで呼び出し可能 |
メソッド内部から値を呼び出し元に返すには return 文に続いて値を指定します。この時の戻り値の型は、メソッド名の前に記述します。
コンストラクタ以外のメソッド名は通常、キャメルケース (lower camel case) で定義します。先頭は小文字で、単語の区切りを大文字にします。例えば、従業員の名前を取得するメソッドなら getEmployeeName() となります。
ただしこれは命名規則であって、先頭文字が大文字でもコンパイルはできます。
Java オブジェクトの生成
クラスのインスタンス (オブジェクト) を作成するには new キーワードを使います。
クラス名 変数名 = new クラス名 (コンストラクタへのパラメータ);
Employee クラスを利用するテストプログラムを作成します。
public class TestApp {
public static void main(String[] args) {
Employee p = new Employee(20, "Ichiro Suzuki", 100);
System.out.println(p.getAge()); // 20
System.out.println(p.getName()); // Ichiro Suzuki
System.out.println(p.getEmployeeID()); // 100
}
}
出力内容はコメントとして記載している通りになります。
確かに Person クラス (スーパークラス) のメソッドも、Employee クラスのメソッドも呼び出せています。