Javaのオブジェクト指向|カプセル化とインスタンス
オブジェクト指向の4大概念(カプセル化・継承・多態性・抽象化)と、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」の記事
人気記事
- TS2307: Cannot find module '@components/Widget601' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget591' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget581' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget571' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget561' or its corresponding type declarations の原因と解決法
- TS2307: Cannot find module '@components/Widget551' or its corresponding type declarations の原因と解決法
学習ルート
体系的に学びたい方はこちらから。
エラー解決コース →あわせて読みたい
- Javaの配列オブジェクトの配列
- Javaのクラスとオブジェクト同じ講座の次の回
- Javaの継承OOPの継承
- Javaの多態性OOPの多態性
- Javaプログラミングのベストプラクティス設計のコツ