talosのプログラミング教室

はじめてのJava ~クラスとメソッド編~

スポンサーリンク

f:id:talosta:20200404182056p:plain

今回はJavaクラスメソッドについて説明します。

オブジェクト指向の本質とも言えるのでしっかり学習しましょう。

クラスの定義

クラスは次のように定義します。

class Human {
    double height;
    double weight;
    int age;
}

Humanクラスを定義し、その中でheightとweight、ageというインスタンス変数を定義しました。

オブジェクトの作成

オブジェクトの作成はnew演算子によって行います。

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


ちなみに似たような言葉にオーバーライドという言葉があります。

こちらの記事で説明していますので、知らない方は読んでみてください。

talosta.hatenablog.com

おわりに

今回はJavaクラスメソッドについて説明しました。

次回は継承について説明します。