オブジェクト指向プログラミングは4つのコア原則に基づいています — カプセル化、継承、ポリモーフィズム、抽象化。Javaはこれらを中心に構築されており、これらを理解することはJavaプログラムの設計に不可欠です。
1. カプセル化 — データをバンドルして内部を隠す
{
balance;
{
(amount > ) balance += amount;
}
{ balance; }
}
カプセル化は内部状態(private)を隠し、制御されたアクセス(publicメソッド/ゲッター/セッター)を公開します。これは不変条件を保護します — 負の残高を直接設定することはできません — また、呼び出し元を破壊することなく内部を変更できます。
class Animal {
void eat() { System.out.println("eating"); }
}
class Dog extends Animal { // Dog IS-A Animal — inherits eat()
void bark() { System.out.println("woof"); }
}
継承により、サブクラスはスーパークラスの動作を再利用して拡張でき、"is-a"関係をモデル化してコードの重複を回避できます。
Animal a = new Dog(); // a Dog treated as an Animal
a.makeSound(); // calls Dog's overridden version at RUNTIME (dynamic dispatch)
// the same method behaves differently depending on the actual object:
List<Animal> animals = List.of(new Dog(), new Cat());
for (Animal animal : animals) animal.makeSound(); // each makes its own sound
ポリモーフィズムにより、共通の型を通じて異なるサブクラスを均一に扱うことができ、実際のオブジェクトの上書きされたメソッドが実行時に呼び出されます — 柔軟で拡張可能なコードを実現します。
interface PaymentProcessor {
void pay(double amount); // WHAT it does, not HOW
}
class StripeProcessor implements PaymentProcessor {
public void pay(double amount) { /* complex implementation hidden */ }
}
// callers depend on the abstraction, not the concrete implementation
PaymentProcessor processor = new StripeProcessor();
抽象化(インターフェース/抽象クラスを介して)は単純化されたコントラクトを公開しながら複雑な実装を隠します — 実装をスワップでき、結合度を減らすことができます。
4つの柱はオブジェクト指向設計とJava自体の基礎です。
カプセル化はデータの整合性を保護し、安全な変更を実現します。継承は再利用を促進します。ポリモーフィズムは柔軟性と拡張性を提供します(多くの型を均一に扱い、動作は実行時に解決されます)。抽象化は結合度と複雑さを減らします。
これらを理解することは単なる用語ではありません — クラスの構造化、APIの設計、保守可能で拡張可能なシステムの構築方法を指示します。
また、開発者が適切なOOP用語で考えているかどうかを明らかにするため、最も一般的なインタビュー質問の中で上位にあります。これはJavaのクラス中心のエコシステムで効果的に作業するために不可欠です。