本文へスキップ
T2R tech2rich.com
プログラミング 📚 Java入門 第7回 #Java #入門 #プログラミング初心者 #クラス #オブジェクト指向

【Java入門 第7回】クラスとオブジェクトの基礎|設計図と実体の違いから理解する

Javaのクラスとオブジェクトを完全初心者向けに徹底解説。フィールド・コンストラクタ・メソッドの書き方、new キーワード、this の意味、アクセス修飾子まで丁寧に説明します。

📅 公開: 2026.05.20 🔄 更新: 2026.05.20 ⏱ 読了 約8分 ✍ 管理人

第6回では、メソッドで処理をまとめる方法を学びました。 今回はいよいよ Java の核となる概念 ── クラスとオブジェクト に入ります。

「オブジェクト指向?難しそう…」と感じるかもしれませんが、安心してください。 クラスは「設計図」、オブジェクトは「実物」、というシンプルなたとえを軸に、ゆっくり丁寧に進めていきます。

質問

この記事のゴール

「クラスとオブジェクトの違い」「自分で簡単なクラスを書ける」「new・this キーワードの意味」を理解することです。

クラスとオブジェクトの違い(現実世界のたとえ)

まず、用語を 1 つずつ確認しましょう。

用語例え説明
クラス(Class)設計図・型「車とはこういうもの」という定義
オブジェクト(Object)実物・インスタンス設計図から作られた、実際の「私のトヨタ車」

💡 イメージ: クラスは 「たい焼きの鉄板」、オブジェクトは 「焼き上がったたい焼き」。1 つの鉄板から、たい焼きは何個でも作れます。同じように、1 つのクラスから、オブジェクトは何個でも作れます。

たとえば、「人」というクラスがあって、その設計図には:

が書かれている、と想像してください。 このクラスから「佐藤さん」「田中さん」というオブジェクトが作られると、それぞれが**独立した「実物の人」**として動きます。

はじめてのクラスを書いてみる

実際に、Person(人) クラスを書いてみましょう。

// Person.java  ← ファイル名は public class 名と同じにする
public class Person {

    // ── フィールド(クラスが持つデータ・変数のクラス版) ──
    String name;       // 名前を保存する場所
    int age;           // 年齢を保存する場所

    // ── コンストラクタ:オブジェクトを new で作るときに呼ばれる特別なメソッド ──
    //    特徴: ① 名前がクラス名と同じ  ② 戻り値の型を書かない
    public Person(String n, int a) {
        name = n;      // 引数 n をフィールド name に保存
        age = a;       // 引数 a をフィールド age に保存
    }

    // ── メソッド:このクラスができる「動作」 ──
    public void introduce() {
        // フィールドの name / age を使って自己紹介を出力
        System.out.println("私の名前は " + name + " です。" + age + " 歳です。");
    }
}

これは「Person クラス」=「人の設計図」です。まだ実物の人ではない点に注意してください。

main からオブジェクトを作って使う

次に、別のクラス(Main)からこの設計図を使ってオブジェクトを作ります。

// Main.java
public class Main {
    public static void main(String[] args) {
        // ── Person クラスから 2 つのオブジェクト(実物)を作成 ──
        //   new Person(...) で「設計図から実物を作って!」と命令
        //   コンストラクタが呼ばれて name, age がセットされる
        Person sato   = new Person("佐藤", 28);   // 佐藤さん(28歳)を生成
        Person tanaka = new Person("田中", 35);   // 田中さん(35歳)を生成

        // ── 各オブジェクトのメソッドを呼び出す ──
        //   オブジェクト名.メソッド名() の形でアクセス
        sato.introduce();    // → 私の名前は 佐藤 です。28 歳です。
        tanaka.introduce();  // → 私の名前は 田中 です。35 歳です。
    }
}

1 行ずつ丁寧に解説

String name;
int age;

フィールド とは、クラスが「持つ情報」のこと。変数のクラス版 と理解すれば OK です。

public Person(String n, int a) {
    name = n;
    age = a;
}

コンストラクタ は、オブジェクトを新しく作るときに呼ばれる特別なメソッドです。 特徴:

Person sato = new Person("佐藤", 28);
sato.introduce();

this キーワード(超重要)

先ほどの例では、コンストラクタの引数名を na にしていました。 しかし実務では、フィールド名と同じ引数名にしたいことが多いです。そのときに使うのが this です。

public class Person {
    String name;
    int age;

    // 引数名をフィールド名と同じにする
    public Person(String name, int age) {
        this.name = name;  // フィールドの name = 引数の name
        this.age = age;
    }
}
書き方意味
this.nameこのオブジェクトのフィールド name
name引数の(=ローカルの) name

💡 this「このオブジェクト自身」 を指す特別な言葉。コンストラクタやメソッドの中で、自分自身のフィールドにアクセスするときに使います。

アクセス修飾子(public と private)

ここまで public というキーワードが何度か出てきました。これは アクセス修飾子 と呼ばれ、「誰がアクセスしていいか」 を決めるものです。

修飾子意味
public誰でもアクセス OK(他のクラスからも見える)
privateこのクラス内からのみアクセス OK(外からは見えない)

実務では、フィールドは private、メソッドは public にするのが基本です。これは 「カプセル化(隠蔽)」 と呼ばれる、オブジェクト指向の重要な考え方です。

public class Person {
    private String name;  // 外から直接アクセス不可
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // ゲッター(値を取り出すメソッド)
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    // 動作メソッド
    public void introduce() {
        System.out.println("私は " + name + " です。");
    }
}

外側からは:

Person sato = new Person("佐藤", 28);
// sato.name = "山田";  // ❌ エラー(private なのでアクセス不可)
String n = sato.getName();  // ⭕ ゲッター経由なら OK

💡 なぜ private にする? 直接フィールドを変えられると、想定外の値(例:年齢に -100 を入れる)が入ってバグの原因になります。メソッド経由でしか変えられないようにすると、安全になります。

ハマりがちなエラー TOP3

エラー① クラス名とファイル名が違う

// ファイル名: Animal.java
public class Person {  // ❌ ファイル名と一致していない
}

対処: public class Person を書くなら、ファイル名は Person.java にする。

エラー② new を忘れる

Person sato;
sato.introduce();  // ❌ null 参照エラー(NullPointerException)

対処: 必ず new Person(...) で実体を作ってから使う。

エラー③ クラス名は大文字始まりが慣習

public class person { ... }  // ❌ 動くけど慣習違反
public class Person { ... }  // ⭕ 正しい

対処: クラス名は アッパーキャメルケース(先頭大文字) が Java の慣習。

オブジェクト指向の真価:なぜクラスを使う?

ここまで読んで「メソッドだけでもよくない?」と思った方、するどいです。 クラスの真価は、規模が大きくなったときに発揮されます。

編集部より

編集部より

クラスとオブジェクトは、最初は「???」となりやすい概念ですが、「設計図と実物」のたとえさえ忘れなければ大丈夫。慣れれば呼吸するように書けるようになります!

練習問題

以下のクラスを作ってみましょう。

商品を表す Product クラス を作ります。

  • フィールド: name(String)、price(int)
  • コンストラクタ: 2 つの値を受け取って初期化
  • メソッド: showInfo() で「商品名: ○○ / 価格: ○○円」を表示

main メソッドから 2 つの商品オブジェクトを作って表示してください。

解答例

// Product.java
public class Product {
    // ── フィールドは private(外から直接いじれないようにする = カプセル化) ──
    private String name;     // 商品名
    private int price;       // 価格(円)

    // ── コンストラクタ:商品オブジェクトを作るときに名前と価格を受け取る ──
    public Product(String name, int price) {
        this.name = name;     // this.name = フィールドの name / name = 引数の name
        this.price = price;   // this を付けないとどちらも引数を指してしまうので注意
    }

    // ── 商品情報を表示するメソッド ──
    public void showInfo() {
        System.out.println("商品名: " + name + " / 価格: " + price + "円");
    }
}
// Main.java
public class Main {
    public static void main(String[] args) {
        Product apple = new Product("りんご", 150);
        Product bread = new Product("パン", 280);

        apple.showInfo();   // 商品名: りんご / 価格: 150円
        bread.showInfo();   // 商品名: パン / 価格: 280円
    }
}

まとめ

第 7 回では、以下を学びました。

次回は、プログラムが 「エラーで突然落ちないように守る」 ための 例外処理(try-catch) を学びます。 実務で必須の重要トピックです。お楽しみに!

関連の技術記事