はじめてのJava ~クラスとメソッド編~
スポンサーリンク
オブジェクト指向の本質とも言えるのでしっかり学習しましょう。
クラスの定義
クラスは次のように定義します。
class Human { double height; double weight; int age; }
Humanクラスを定義し、その中でheightとweight、ageというインスタンス変数を定義しました。
オブジェクトの作成
class Yamada { public static void main(String args[]) { Human yamada = new Human(); // オブジェクト作成 yamada.height = 178.5; yamada.weight = 71.8; yamada.age = 26; System.out.println("Yamada's height: " + yamada.height); System.out.println("Yamada's weight: " + yamada.weight); System.out.println("Yamada's age: " + yamada.age); } }
// 出力 Yamada's height: 178.5 Yamada's weight: 71.8 Yamada's age: 26
コンストラクタの追加
コンストラクタはインスタンス生成時に実行されるメソッドです。
初期化などの処理を行います。
class Human { double height; double weight; int age; // コンストラクタ Human(double height, double weight, int age) { this.height = height; this.weight = weight; this.age = age; } }
class Tanaka { public static void main(String args[]) { Human tanaka = new Human(179.3, 69.0, 23); System.out.println("Tanaka's height: " + tanaka.height); System.out.println("Tanaka's weight: " + tanaka.weight); System.out.println("Tanaka's age: " + tanaka.age); } }
// 出力 Tanaka's height: 179.3 Tanaka's weight: 69.0 Tanaka's age: 23
ちなみに「this」は実行中のオブジェクトを指します。
インスタンスメソッドの定義と呼び出し
インスタンスメソッドは次のように定義し、呼び出します。
class Human { double height; double weight; int age; int steps; Human(double height, double weight, int age, int steps) { this.height = height; this.weight = weight; this.age = age; this.steps = steps; } // インスタンスメソッドの定義 void walk() { steps++; } }
class Saito { public static void main(String args[]) { Human saito = new Human(167.9, 67.3, 30, 0); for(int i = 0; i < 10; i++) { saito.walk(); // インスタンスメソッド呼び出し } System.out.println("Saito's step: " + saito.steps); } }
// 出力 Saito's step: 10
メソッドの定義はコンストラクタの定義に似ていますが、メソッド名の前に戻り値の型を書くところが異なります。
呼び出しは「オブジェクト名.メソッド名(引数)」というように行います。
オーバーロード
同じ名前で引数の違うメソッドやコンストラクタを複数定義することができます。
これをオーバーロードと言います。
使い方を見てみましょう。
class Human { double height; double weight; int age; int steps; Human(double height, double weight, int age, int steps) { this.height = height; this.weight = weight; this.age = age; this.steps = steps; } void walk() { steps++; } // オーバーロード void walk(int stepNum) { steps += stepNum; } }
class Saito { public static void main(String args[]) { Human saito = new Human(167.9, 67.3, 30, 0); for(int i = 0; i < 10; i++) { saito.walk(2); } System.out.println("Saito's step: " + saito.steps); } }
// 出力 Saito's step: 20
ちなみに似たような言葉にオーバーライドという言葉があります。
こちらの記事で説明していますので、知らない方は読んでみてください。