コース一覧
    Java入門:クラスとオブジェクト
    クラスにメソッドを定義する

    Java入門:クラスとオブジェクト

    クラスとオブジェクトの設計を学び、状態と振る舞いを持つJavaプログラムを組み立てられるようにします。

    1
    クラスとオブジェクト
    01. クラスを定義する5分
    02. クラスにフィールドを持たせる12分
    03. クラスにメソッドを定義する5分
    04. インスタンスを作る5分
    05. コンストラクタ5分
    06. this キーワード5分
    07. カプセル化 (private と getter)12分
    08. Person クラスを作る5分
    09. Product クラスで税込価格15分
    10. 銀行口座クラス15分
    11. toString のオーバーライド5分
    12. クラスとオブジェクト クイズ5分
    13. Java 入門 最終クイズ5分

    クラスにメソッドを定義する

    フィールドを持たせたおかげで、チケット 1 枚の情報は 1 つの変数にまとまりました。ところが表示するたびに t.seat + " " + t.price + "円" と組み立て直しています。一覧に 1 か所、詳細に 1 か所、レシートに 1 か所と同じ式が散らばり、末尾を「円」から「JPY」に変えたい日には、3 か所を探して回ることになります。

    組み立て方を、持ち主の側に置く

    その式は Ticket 自身がいちばんよく知っているはずです。クラスの中にメソッドとして書いてしまいましょう。

    Java

    public class Ticket {
        public String seat;
        public int price;
    
        public String label() {
            return seat + " " + price + "円";
        }
    }

    書き方はこれまでのメソッドとほとんど同じですが、static が付いていません。そしてもう 1 つ、引数を 1 つも受け取っていないのに seat と price を使えています。

    自分のクラスのフィールドは、引数で渡さなくても名前だけで読めます。label() の中の seat は、このメソッドを呼ばれた実体の seat です。

    呼ぶときは、クラスではなく実体から

    static の有無で、呼び出し方が変わります。

    Java

    Ticket t = new Ticket();
    t.seat = "A-12";
    t.price = 4800;
    System.out.println(t.label()); // A-12 4800円

    Ticket.label() とは書けません。label() が使う seat は実体ごとに違うので、どの実体の話なのかを言わずには呼べないからです。static の付いたメソッドはクラスに属していて、実体が無くても呼べました。ちょうど対になっています。

    ここを取り違えると non-static variable seat cannot be referenced from a static context というエラーに出会います。フィールドを使うメソッドに static を付けてしまったときの定番です。

    同じメソッドでも、実体が違えば答えが違う

    メソッドを実体に紐づけると何が嬉しいのか、2 枚並べると分かります。

    Java

    Ticket a = new Ticket();
    a.seat = "A-12";
    a.price = 4800;
    
    Ticket b = new Ticket();
    b.seat = "B-3";
    b.price = 3200;
    
    System.out.println(a.label()); // A-12 4800円
    System.out.println(b.label()); // B-3 3200円

    呼んでいるのは同じ label() です。それでも答えが違うのは、使っているフィールドが別の実体のものだからです。データと、そのデータの扱い方が同じ場所にある。これがクラスにメソッドを書く一番の理由です。

    やってみよう

    bookDescription(String title, String author) は、Book の実体を作り、そのメソッド describe() を呼んで説明文を返します。

    • Book には String のフィールドを 2 つ持たせ、前回のやり方でそれぞれに値を入れます
    • describe() に static は付けません。フィールドは名前だけで使えます
    • つなぐ位置に半角スペースが要ります。返す文字列の形は課題の要件をそのまま読んでください
    • 引数をその場で組み立てて返してもテストは通りますが、それでは Book が 1 度も仕事をしていません。必ず実体のメソッドを経由してください

    要件

    1. Book クラスのインスタンスメソッド describe() を実装すること
    2. bookDescription の中で new Book(title, author).describe() のようにインスタンスメソッドを呼ぶこと (固定文字列の即時 return は不可)
    3. describe() は "<title> by <author>" の形 (半角スペース付き) の文字列を返すこと

    ヒント

    `new Book(title, author)` でインスタンスを作り、続けて `.describe()` を呼ぶと一行で書けます

    `describe()` の中では `this.title + " by " + this.author` のように `+` で文字列を組み立てます

    `by` の前後には半角スペースが 1 つずつ入ります。スペースの有無や全角・半角の違いに注意しましょう

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

    関連レッスン

    • インスタンスを作る

      クラスから実体 (インスタンス) を作る方法と new 演算子の使い方を学ぼう。

    • コンストラクタ

      オブジェクトを生まれた瞬間に初期化する仕組み、コンストラクタを学ぼう。new でクラスを呼び出すときに何が起きているのかを追いかけながら、Book クラスを組み立てて本のフルタイトルを返すメソッドを完成させる。

    • this キーワード

      this は「このオブジェクト自身」を指す参照です。フィールドと引数の名前衝突を解決したり、メソッドチェーンを書いたり、別のコンストラクタを呼んだりするために使います。

    • カプセル化 (private と getter)

      `private` フィールドと `public` な getter / setter を使って、データを安全に守る「カプセル化」を学ぼう。負の入金を弾く `safeAccount(int initial, int deposit)` を書く。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • フィールドクラスが持つデータ
    • 変数データに名前をつけて参照する仕組み
    • クラスデータと振る舞いを束ねる単位
    • メソッドクラスに属する関数
    • 引数位置引数=順番で渡す。
    • テストバグを見つける工程
    • インスタンスクラスから生成された実体
    main.java
    エディタを読み込んでいます

    メモ

    クラスにメソッドを定義する

    ⌘S で保存