StackShelf
Java 第7回

Javaのオブジェクト指向|カプセル化とインスタンス

オブジェクト指向の4大概念(カプセル化・継承・多態性・抽象化)と、Javaにおけるクラス・インスタンス・フィールド・メソッドの関係を具体例と失敗例で学びます。

2分で読める
Javaオブジェクト指向プログラミングクラスオブジェクト継承

結論:オブジェクト指向は「データと処理をオブジェクトにまとめ、設計図(クラス)から実体を作る」考え方

オブジェクト指向(OOP)は、プログラムを「もの(オブジェクト)」の集合として設計する手法です。JavaはOOPを中心に据えた言語で、クラスが設計図、インスタンスが実体、フィールドが状態、メソッドが振る舞いに対応します。

4つの概念(概要)

  • カプセル化:内部状態を隠し、メソッド経由で操作
  • 継承:既存クラスを拡張して再利用
  • 多態性:同じ型で異なる振る舞い
  • 抽象化:本質だけを抽出(後の回で interface/abstract)

クラスからオブジェクトを作る

public class BankAccount {
    private int balance;

    public void deposit(int amount) {
        if (amount > 0) balance += amount;
    }

    public int getBalance() {
        return balance;
    }
}

BankAccount acc = new BankAccount();
acc.deposit(1000);
System.out.println(acc.getBalance());

失敗例:private フィールドに直接代入

acc.balance = -999; // コンパイルエラー: balance has private access

カプセル化により不正な状態変更を防ぎます。必ず public メソッドを通してください。

this キーワード

インスタンス自身を指します。フィールドと引数が同名のときに使います。

public void setName(String name) {
    this.name = name;
}

まとめ

オブジェクト指向は状態と振る舞いを1つの単位にまとめる設計です。new でインスタンス化し、private + getter/setter でカプセル化が基本形です。次回はクラス定義をさらに深掘りします。

まとめ

Javaのオブジェクト指向はクラス(設計図)とインスタンス(実体)でプログラムを構成します。カプセル化により内部状態を保護し、メソッドで操作します。BankAccountのような小さなクラスを書いてdeposit/withdrawを試しましょう。

次にやること

Bookクラス(title, price)を作り、privateフィールドとgetPrice、applyDiscountメソッドを実装してください。

よくある質問

クラスとオブジェクトの違いは?

クラスは設計図、オブジェクト(インスタンス)はnewで作られる実体です。1クラスから複数インスタンスを作れます。

カプセル化はなぜ必要?

不正な値の代入や内部実装の変更を呼び出し側から隠し、保守性と安全性を高めるためです。

new を省略できる場合は?

StringリテラルやInteger.valueOfなど一部APIです。基本はnewまたはファクトリメソッドで生成します。

static フィールドとインスタンスフィールドの違いは?

staticはクラス共有、インスタンスフィールドは各オブジェクトが持ちます。

ガベージコレクションとは?

参照がなくなったオブジェクトをJVMが自動回収します。C言語のfreeは不要です。

次に読むべき記事

同カテゴリ「Java」の記事

学習ルート

体系的に学びたい方はこちらから。

エラー解決コース →

あわせて読みたい