【6日でできるJava入門】クラスの定義

 Javaにおいてクラスは、データ(フィールド)と処理(メソッド)をひとつにまとめた「設計図」の役割を持ちます。これまでStringArrayListなど既存クラスを使ってきましたが、Javaでは自分だけのクラスを定義して使うことができます。
 ここでは、Java独自のクラスを作成する方法や、クラスを構成する各要素(フィールド・メソッド・コンストラクタ)、アクセス修飾子の使い方について解説します。

1.クラスの基本構造

1.1. クラス宣言の基本

Javaのクラスはclassキーワードで宣言し、次のような構造を持ちます。

public class クラス名 {
    // フィールド(データ)
    // コンストラクタ(初期化)
    // メソッド(処理)
}

例:シンプルなクラス定義

ファイル名:Book.java

public class Book {
    String title;
    int price;

    public Book() {                  // コンストラクタ
        title = "未設定";
        price = 0;
    }

    public void show() {             // メソッド
        System.out.println("タイトル: " + title + ", 価格: " + price + "円");
    }

    public static void main(String[] args) {
        Book b = new Book();
        b.title = "Java入門";
        b.price = 2200;
        b.show();
    }
}

実行結果例

タイトル: Java入門, 価格: 2200円

1.2. クラスの主要構成要素

要素役割
フィールドクラスが持つデータ(変数)
コンストラクタインスタンス生成時に初期化を行う特別なメソッド
メソッドクラスの機能・操作(処理手順)

2.フィールド・メソッド・コンストラクタ

2.1. フィールド(メンバ変数)

クラス内で宣言する変数。オブジェクトごとに固有の値を持つ。

int price;         // フィールド(例:価格)
String title;      // フィールド(例:書名)

2.2. コンストラクタ

 オブジェクト生成時に自動的に呼び出され、主にフィールドの初期化に使う。クラス名と同名、戻り値なし。

public Book() {
    title = "未設定";
    price = 0;
}
  • コンストラクタを複数定義(オーバーロード)可能です。

例:引数つきコンストラクタ

public Book(String t, int p) {
    title = t;
    price = p;
}

2.3. メソッド

クラスに機能を与えるための処理。戻り値・名前・引数を明示します。

public void show() {
    System.out.println("タイトル: " + title + ", 価格: " + price + "円");
}

3.thisキーワードとコンストラクタの連携

3.1. thisキーワード

 クラス内部で自分自身のフィールドやメソッドを参照するのにthisを使います。引数名とフィールド名が重なる場合によく使います。

public Book(String title, int price) {
    this.title = title;   // フィールドのtitleに引数titleを代入
    this.price = price;
}

3.2. コンストラクタの呼び出し

複数のコンストラクタを用意し、共通の初期化処理をthis(...)で呼び出せます。

public Book() {
    this("未設定", 0);
}
public Book(String title, int price) {
    this.title = title;
    this.price = price;
}

4.アクセス修飾子とカプセル化

4.1. アクセス修飾子

クラス・フィールド・メソッドの「外部からの見え方」を制御します。

修飾子意味
publicすべてのクラスからアクセス可能
private同じクラス内のみアクセス可
protected同じパッケージやサブクラスから可

例:カプセル化とアクセサ

public class Book {
    private String title;     // 外部から直接アクセス不可

    public String getTitle() {  // 外部に公開するメソッド
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
  • このようにフィールドをprivateにし、アクセスはpublicなメソッド(getter/setter)経由にすることをカプセル化といいます。

5.サンプルプログラム全体例

ファイル名:Student.java

public class Student {
    private String name;
    private int score;

    public Student() {
        this("未設定", 0);
    }

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public void show() {
        System.out.println("名前: " + name + ", 点数: " + score + "点");
    }

    public static void main(String[] args) {
        Student a = new Student("山田太郎", 80);
        Student b = new Student();
        a.show();
        b.show();
    }
}

実行結果

名前: 山田太郎, 点数: 80点
名前: 未設定, 点数: 0点

まとめ

  • クラスはデータ(フィールド)+処理(メソッド)+初期化(コンストラクタ)で構成される
  • thisでフィールド・コンストラクタ間の区別や連携ができる
  • アクセス修飾子を使い、必要な範囲だけ情報や操作を公開・保護できる
  • サンプルのように自作クラスはさまざまな現実の概念や物を表現できる

クラスを活用することで、複雑な処理やデータを「まとまり」として管理・再利用できるようになります。