コース一覧
    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分

    クラスにフィールドを持たせる

    new Ticket() を 2 回書けば、実体は 2 つできます。ところが今のままでは、その 2 つに違いがありません。1 枚は A 列 12 番、もう 1 枚は B 列 3 番、と覚えさせる場所がどこにも無いからです。中身が空の設計図から作った実体は、何も持っていない箱です。

    中に変数を書くと、実体の持ち物になる

    クラスの中に書いた変数を フィールド と呼びます。書き方はこれまでの変数宣言とほとんど同じで、置く場所がメソッドの中ではなくクラスの直下になるだけです。

    Java

    public class Ticket {
        public String seat;
        public int price;
    }

    seat と price が Ticket のフィールドです。メソッドの中で宣言した変数はそのメソッドが終われば消えますが、フィールドは実体が生きているあいだ値を持ち続けます。ここが決定的な違いです。

    public は、外から読み書きしてよいという印です。実際の開発では隠すのが普通ですが、今はまず持たせることに集中します。

    ドットでつないで出し入れする

    フィールドに触るには、実体を入れた変数のうしろに、ドットとフィールド名をつなげます。

    Java

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

    代入も読み出しも、普通の変数と同じ感覚で書けます。違うのは、誰の seat なのかを必ず先に言うところです。seat とだけ書くことはできません。

    なお、フィールドは何も代入していなくても値を持っています。数値なら 0、boolean なら false、String のようなオブジェクトの型なら null です。null はまだ何も指していないという状態で、このまま t.seat.length() のように中身を触りにいくと NullPointerException が飛びます。実体を作ったら値を入れる、という順番を守ってください。

    実体が別なら、値も別

    フィールドの値は実体ごとに独立しています。同じ Ticket 型から作っても、片方を書き換えたときにもう片方が巻き込まれることはありません。

    Java

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

    設計図は 1 枚でも、そこから作った実体はそれぞれ別の値を抱えます。これがあるから、Ticket という型を 1 つ書くだけで、何百枚のチケットでも扱えます。

    やってみよう

    createBookTitle(String title) は、Book の実体を作って、受け取った title をフィールドに入れ、そのフィールドの値を返すメソッドです。

    • Book は Solution の中に static class として書きます。フィールドは String を 1 つ持たせれば足ります
    • 引数をそのまま return すると値としては合ってしまいますが、フィールドを 1 度も使っていません。必ず実体に入れてから、実体から取り出して返してください
    • 空文字列 "" を渡しても、そのまま "" が返ります。特別扱いは要りません

    要件

    1. createBookTitle の中で new Book() を使ってインスタンスを作ること
    2. book.title フィールドに引数 title を代入してから return すること (固定文字列の即時 return は不可)
    3. 戻り値はそのインスタンスの title フィールドの値であること

    ヒント

    `new Book()` でインスタンスを作ったあと、`book.title = title;` のようにフィールドへ代入できます

    読み出すときは `book.title` をそのまま使えます。`return book.title;` で返しましょう

    Book クラスはすでに `static class Book { ... }` として用意されています。フィールド `title` の宣言は触らなくて大丈夫です

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

    関連レッスン

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

      クラスに振る舞いを持たせるインスタンスメソッドの定義方法と、static メソッドとの違いを学ぼう。

    • インスタンスを作る

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

    • コンストラクタ

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

    • this キーワード

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

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

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

    • 設計何をどう作るかを決める前工程
    • 変数データに名前をつけて参照する仕組み
    • クラスデータと振る舞いを束ねる単位
    • フィールドクラスが持つデータ
    • メソッドクラスに属する関数
    • オブジェクトキーと値のペアで構造を作るデータ
    • 引数位置引数=順番で渡す。
    • インスタンスクラスから生成された実体
    main.java
    エディタを読み込んでいます

    メモ

    クラスにフィールドを持たせる

    ⌘S で保存