CodeGym /コース /JAVA 25 SELF /クラスとオブジェクトの概念

クラスとオブジェクトの概念

JAVA 25 SELF
レベル 14, レッスン 1
使用可能

1. クラスとオブジェクトとは

たとえ話から始めましょう。車の設計図を思い浮かべてください。設計図には車にタイヤが4つあること、エンジン、色、座席などが記されています。しかし設計図そのものは道路を走らず、エンジン音もせず、ガソリンも要りません。これは、車の仕組みを記述したものにすぎません。

クラスはプログラミングにおける同様の「設計図」(テンプレート)で、インスタンスが持つデータ(フィールド)と振る舞い(メソッド)を定義します。

オブジェクトは、その設計図から組み立てられた「実物」、すなわち具体的なインスタンスです。各オブジェクトは独自の状態(たとえば、ある車は赤、別の車は青)を持ち、クラスで定義された振る舞い(走る、ブレーキをかける、クラクションを鳴らす など)を実行できます。

身近な例

  • クラス: 人 (Person) — 人は名前・年齢・身長を持ち、話す・走るといったことができるという説明。
  • オブジェクト: Vasya、Petya、Katya — 具体的な人たちで、各自が固有の名前や年齢を持つ。
クラス オブジェクト 1 オブジェクト 2
Person
name = "Vasya" 
age = 25
name = "Katya" 
age = 30

なぜクラスが重要か?

  • 関連する変数とメソッドをひとまとめにできる。
  • 同じ構造でデータの異なるオブジェクトをいくつでも作成できる。
  • 「銀行口座」「商品」「本」「ユーザー」など、複雑な実体を簡潔に表現できる。

2. クラス宣言の構文

Java では、キーワード class を使ってクラスを宣言します。続けてクラス名(慣例として先頭は大文字)、そして波かっこを書き、その内側にフィールドとメソッドを記述します。

最も簡単な例

public class Person {
    // フィールドとメソッドはここに書く
}

解説:

  • public — アクセス修飾子。
  • class — コンパイラに「クラスを宣言する」と伝える。
  • Person — クラス名(自分で決めるが、先頭は大文字)。

クラス名の重要なルール

  • クラス名は先頭を大文字にする(例: Car, Account, Book)。
  • クラス名には空白や特殊文字は使えない。例外はアンダースコア(_)と $(ただしこれはまれ)。
  • 名前が複数の単語から成る場合は CamelCase を使う: BankAccount, BookStore。

クラスはどこに書く?

クラスは別ファイルに宣言できます(通常は 1 ファイル 1 クラス)。また、別のクラスの内側に宣言することもできます(ネストされたクラスについては後述)。

例: ファイル Person.java:


public class Person {
    // フィールドとメソッド
}

3. クラスのフィールドとメソッド(概要)

今はクラスを宣言しただけで、まだ中身は空の箱のようなものです。そこに「属性」(フィールド)と「動作」(メソッド)を追加しましょう。

フィールド(クラス内の変数)

フィールドは、そのクラスの各オブジェクトが持つデータを表します。


public class Person {
    String name; // 人の名前
    int age;     // 年齢
}

メソッド(クラス内の関数)

メソッドは、オブジェクトが何をできるかを記述します。

public class Person {
    String name;
    int age;

    void sayHello() {
        System.out.println("こんにちは、私の名前は " + name + " です!");
    }
}

解説:

  • void — 値を返さない(戻り値については後で説明)。
  • sayHello() — メソッド名。丸かっこは必須。
  • メソッド内部からクラスのフィールド(たとえば name)にアクセスできる。

4. オブジェクトの生成

いよいよ本番です! 設計図から「実物」を作るには、キーワード new を使います。

オブジェクト生成の構文


Person vasya = new Person();
  • Person — 変数の型(私たちのクラス)。
  • vasya — 変数名(任意に決めてよい)。
  • new Person() — Person 型の新しいオブジェクトを生成。

これで、vasya という変数が、Person クラスのオブジェクトを参照するようになりました。このオブジェクトにはそれ自身のフィールドとメソッドがあります。

フィールドとメソッドへのアクセス

ドット演算子でアクセスします:

vasya.name = "Vasya";
vasya.age = 25;

vasya.sayHello(); // 出力: こんにちは、私の名前は Vasya です!

オブジェクトはいくつでも作成できる

Person petya = new Person();
petya.name = "Petya";
petya.age = 30;

petya.sayHello(); // こんにちは、私の名前は Petya です!

各オブジェクトは自分自身のデータを持つ独立した「コピー」です。

5. これまでの内容との関連

これまでは、main メソッドのあるクラスの中に直接変数やメソッドを書いており、自分の型を作ることは考えていませんでした。これからは、自分専用の「データと関数の入れ物」を作れます。

これは大きな可能性を開きます。課題に登場するあらゆる実体(顧客、商品、口座、注文、動物、車 など)を表現できます。プログラムはより構造化され、読みやすく、拡張しやすくなります。

例: 初めての自作クラス

ミニプログラム用に簡単なクラスを書いてみましょう。たとえば「銀行口座」(BankAccount)。この例はコースの進行に合わせて発展させていきます。

public class BankAccount {
    String owner;     // 口座の所有者
    int balance;      // 口座残高

    void printInfo() {
        System.out.println("所有者: " + owner + "、残高: " + balance + " ユーロ。");
    }
}

次に、プログラムを起動するために必要な main メソッドで、このクラスのオブジェクトを作成できます:

public class Main {
    public static void main(String[] args) {
        BankAccount account1 = new BankAccount();
        account1.owner = "Ivan";
        account1.balance = 1000;
        account1.printInfo(); // 所有者: Ivan、残高: 1000 ユーロ。

        BankAccount account2 = new BankAccount();
        account2.owner = "Maria";
        account2.balance = 2000;
        account2.printInfo(); // 所有者: Maria、残高: 2000 ユーロ。
    }
}

注意: 各オブジェクトはそれぞれのフィールド値を持ちます。account1 の残高を変更しても、account2 には影響しません。

ビジュアル図: クラスとオブジェクト

graph TD
    subgraph Class
        Person["Class Person | name:String | age:int | sayHello()"]
    end

    subgraph Objects
        vasya["vasya : Person | name = 'Vasya' | age = 20"]
        petya["petya : Person | name = 'Petya' | age = 25"]
    end

    vasya --> Person
    petya --> Person

解説:

  • Person — クラス(テンプレート)。
  • vasya と petya — そのテンプレートから作られたオブジェクト(インスタンス)。

6. クラス宣言やオブジェクト生成で陥りやすいミス

エラー No. 1: クラス名を小文字で始めてしまう。
Java では(コンパイラはエラーにしませんが、経験豊富な開発者は皆指摘します)クラス名は先頭を大文字にする慣習です。class person と書かずに、class Person と書きましょう。

エラー No. 2: 波かっこを付け忘れる。
クラス本体は必ず波かっこで囲む必要があります。

public class Person // エラー!
    String name;

正しい例:

public class Person {
    String name;
}

エラー No. 3: オブジェクトを作らずにインスタンスのフィールド/メソッドへアクセスしようとする。
メソッドやフィールドが static として宣言されていない場合、オブジェクト経由でのみアクセスできます:

Person.sayHello(); // エラー!

正しい例:

Person vasya = new Person();
vasya.sayHello();

エラー No. 4: public クラスで、ファイル名とクラス名が一致しない。
クラスが public として宣言されている場合、ファイル名はクラス名と一致していなければなりません:

// ファイル Person.java
public class Person { ... }

ファイル名が異なると、コンパイラはエラーを出します。

エラー No. 5: オブジェクトを初期化せずにインスタンスのフィールドを使う。
クラスのフィールド(static でないもの)はクラスそのものではなくオブジェクトに属します。

1
タスク
JAVA 25 SELF, レベル 14, レッスン 1
ロック未解除
あなたの仮想世界の新しい仲間
あなたの仮想世界の新しい仲間
1
タスク
JAVA 25 SELF, レベル 14, レッスン 1
ロック未解除
ゴロゴロ鳴る不思議に命を吹き込もう
ゴロゴロ鳴る不思議に命を吹き込もう
1
タスク
JAVA 25 SELF, レベル 14, レッスン 1
ロック未解除
デジタル百科事典の作成
デジタル百科事典の作成
1
タスク
JAVA 25 SELF, レベル 14, レッスン 1
ロック未解除
新学期開始: 学生の管理
新学期開始: 学生の管理
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION