広告

手を動かして学ぶ Java入門 (クラス・メソッド)

環境構築不要! ブラウザから直接コードを実行できます。
本記事では、Java のクラス・メソッドについて学びます。

15分くらいで、さくっと終わる記事をめざしています。
(今回はいつもより少し長めです)


シリーズ一覧

続きは近日公開予定!

はじめに

この記事は paiza.IO の「Online Java compiler」を利用しています。
2024/10/15 現在、上記環境の Java バージョンは 18 です。(paiza.IO利用ガイド)

実行したコードは paiza.IO で保存および公開されることがあります。
そのため、個人情報などの機密性の高い情報は、コードとして入力しないようにご注意ください。

詳細は paiza.IO の利用規約およびプライバシーポリシーをご確認ください。

クラスのおさらい

オブジェクト指向プログラミングにおけるクラス(英: class)は、オブジェクトを生成するための設計図あるいはひな形に相当するものである。抽象データ型の一つ。クラスから生成したオブジェクトの実体のことをインスタンスという。

クラスとは、本当に簡単にいうと…

  • フィールド (変数)
  • メソッド (関数)

この2つが集まったものです。

今回は、このうちの メソッド については学んでいきます。

メソッド

メソッド (method) あるいは メンバー関数 (-かんすう, member function) とはオブジェクト指向プログラミング言語において、あるクラスまたはオブジェクトに所属するサブルーチンを指す。

メソッドとは、プログラムの実際の処理をまとめたものです。
例えば、足し算や引き算などの計算をしたり、その結果を画面に出力したり、などなどです。

Java 以外の言語では「メンバ関数」と呼ぶこともあります。

それでは、Human クラスを例に メソッド を見ていきましょう。
Human は 人間 という意味ですね。

public class Human {
    public void say() {
        System.out.println("こんにちは!");
    }
}

この例では say というメソッドを作りました。
話す という意味のメソッドです。

実際にこのクラスを動かしてみましょう。
コードは変更せずに、そのまま「実行(Ctrl-Enter)」ボタンを押してください。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

こんにちは!

と表示されたら成功です。

呼び出し

オブジェクト指向言語においては、多くの場合クラスと呼ばれるものを元に作成したオブジェクトの実体を指す。

public class Human {
    public void say() {
        System.out.println("こんにちは!");
    }
}

メソッドを呼び出すには、まず Human クラスの インスタンス を作成します。
インスタンスの生成には new 演算子を使います。

そして、そのインスタンスを使って say メソッドを呼び出します。

Human human = new Human();
human.say();

このプログラムを実行すると「出力」には次のように表示されます。

こんにちは!

無事に say メソッドが実行されたのがわかりますね。

メソッド呼び出しの基本は、

  • インスタンス変数名 + ドット + メソッド名 + カッコ

になります。

human.say();
^^^^^ <--- インスタンス変数名
human.say();
     ^ <--- ドット
human.say();
      ^^^ <--- メソッド名
human.say();
         ^^ <--- カッコ

アクセス修飾子

カプセル化と情報隠蔽を実現するために、Javaではアクセス修飾子を使います。
アクセス修飾子(publicやprivateなど)を使うと、クラスのメンバをどこまで公開するか?どこまで非公開にするか?を制御できます。

say メソッドをもう少し詳しく見ていきましょう。

public class Human {
    public void say() {
        System.out.println("こんにちは!");
    }
}

最初の public は、メソッドのアクセス修飾子です。
public (公開) の他に private (非公開) もよく使います。

public void say()
^^^^^^ <--- メソッドのアクセス修飾子

メソッドのアクセス修飾子は、簡単に説明すると…

  • public : クラスの外からメソッドを呼び出せる
  • private : クラスの外からメソッドを呼び出せない

という違いがあります。

private メソッドの例も見てみましょう。
Human クラスに whisper(ささやく) メソッドを追加します。

public class Human {
    public void say() {
        whisper();
    }

    private void whisper() {
        System.out.println("こんにちは…");
    }
}

それぞれのメソッドのアクセス修飾子は、

  • say : public (公開)
  • whisper : private (非公開)

ですね。

まず publicsay メソッドを呼び出してみます。

実際にプログラムで確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

こんにちは…

と表示されたら成功です。


whisper メソッドは private です。
しかし、Human クラスの内部(sayメソッド) からは呼び出すことができました。

public class Human {
    public void say() {
        whisper();
        ^^^^^^^^^^ <--- クラス内部からは呼び出しOK!
    }

    private void whisper() {
        ...
    }
}

それでは、whisper メソッドをクラスの外から呼び出してみます。
先ほどのコードを書き換えて、実際にエラーになることを確認してみましょう。

Main クラスの

Human human = new Human();
human.say();

これを…

Human human = new Human();
human.whisper();

に書き換えてから「実行(Ctrl-Enter)」ボタンを押してください。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

下記のようなコンパイルエラーが出たら成功です。

Main.java:5: error: whisper() has private access in Human
        human.whisper();
             ^
1 error

"whisper() has private access in Human" とは、意訳すると

  • whisper メソッドは Human クラスの private メソッドです。(よって外からはアクセスできません)

という感じです。

このように、private なメソッドは、そのクラスの外からはアクセスできなくなります。

さて、private のアクセス修飾子についてどう感じましたでしょうか?
不便だな、と感じるかたもいらっしゃるかもしれません。

しかし、private は無くてはならないアクセス修飾子です。
一般的には、必要最低限のメソッドだけを public にして、それ以外は private にします。

ただ、このあたりはクラス設計の話になってくるので、ちょっと難しいかもです。
慣れるまでは、public をメインで使ってもよいかもしれません。

また、メソッドのアクセス修飾子には publicprivate 以外にもあります。
もし興味がありましたら、下記の記事もご参照ください。


戻り値

アクセス修飾子の次にくるのは 戻り値の型 です。

public class Human {
    public void say() {
        System.out.println("こんにちは!");
    }
}
public void say()
       ^^^^ <--- 戻り値の型

今回の say メソッドは戻り値がありません。

戻り値がない場合は void とします。読み方は「ボイド」です。
void は「中身がない、空っぽの」という意味ですね。

それでは戻り値のある例も見てみましょう。

Human クラスに、年齢を取得する getAge メソッドを持たせます。

public class Human {
    public int getAge() {
        return 20;
    }
}

戻り値の型は int 型にします。

public int getAge() {
       ^^^ <--- 戻り値の型
}

そして、年齢として 20 を返すようにします。
戻り値を返すには return 文を使います。

public int getAge() {
    return 20;
    ^^^^^^ <--- 戻り値を返す
}

実際にプログラムを動かして確認してみましょう。
結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

年齢 = 20

と表示されたら成功です。

メソッドが返す値は変数に代入できる、というのがポイントですね。

int age = human.getAge();
^^^^^^^ <--- 変数 age に、getAge メソッドの戻り値を代入する

パラメータ

引数(ひきすう、英: parameter, argument)は、数学における関数やコンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のことである。

パラメータとは、メソッドに渡す値のことです。
Java 以外の言語では「引数(ひきすう)」と呼ぶこともあります。

それでは、say メソッドに

  • 相手の名前を受け取るための yourName パラメータ

を追加してみましょう。

yourName パラメータは String型 にします。
(String型は 文字列 を扱うクラスです)

public class Human {
    public void say(String yourName) {
        System.out.println("こんにちは、" + yourName + "さん!");
    }
}

パラメータの基本は次のようになります。

  • メソッド名 + ( + パラメータの型 + パラメータ名 + )
public void say(String yourName)
                ^^^^^^ <--- パラメータの型
public void say(String yourName)
                       ^^^^^^^^ <--- 任意のパラメータ名

それでは、パラメータを指定して say メソッドを呼び出してみましょう。
パラメータは String型 なので文字列の "アリス" を指定します。

結果がどうなるか予想してから「実行(Ctrl-Enter)」ボタンを押してください。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

いかがでしたでしょうか? 「出力」のところに

こんにちは、アリスさん!

と表示されたら成功です。


さて、パラメータはいくつでも指定できます。
複数指定するには、カンマ(,) で区切ります。

public class Human {
    public void walk(String place, int minutes) {
        System.out.println(place + "まで " + minutes + "分、歩きました。");
    }
}
Human human = new Human();
human.walk("公園", 30);

このプログラムを実行すると、次のように表示されます。

公園まで 30分、歩きました。

応用問題

【問題】

まずは、下記のプログラムをそのまま「実行(Ctrl-Enter)」してみましょう。
結果はコンパイルエラーになったはずです。

Calculator クラスには、足し算をするための add メソッドがないからですね。
ちなみに Calculator は「計算機」という意味になります。

さて、そこで問題です。
Calculator クラスに add メソッドを追加してください。

そして、プログラムを実行すると、

1 + 2 = 3
30 + 40 = 70
500 + 600 = 1100

と「出力」に表示するようにしてください。

【ヒント】

  • add メソッドは「パラメータ2つ」「戻り値あり」です。

それでは、Calculator クラスに add メソッドを書き加えて「実行(Ctrl-Enter)」してみましょう。

注意:コードは2ファイルあります。上部のタブで切り替え可能です。

タブ

(表示がおかしいときは「コードの再読み込み」ボタンを押してみてください)

無事に、

1 + 2 = 3
30 + 40 = 70
500 + 600 = 1100

と出力されましたでしょうか?

もし解けなかった場合は、下記の回答例をご参照ください。

回答例

【コード】

public class Calculator {
    // ここに add メソッドを追加
    public int add(int value1, int value2) {
        return value1 + value2;
    }
}

【出力】

1 + 2 = 3
30 + 40 = 70
500 + 600 = 1100

まとめ

メソッドとは、プログラムの実際の処理をまとめたものです。
例えば、足し算や引き算などの計算をしたり、その結果を画面に出力したり、などなどです。

クラスにはなくてはならない要素の1つですね。

それでは次回もお楽しみに!


関連記事

ページの先頭へ