Javaのインターフェースと抽象クラス
1. インターフェースとは
インターフェースは、クラスが実装すべきメソッドのセットを定義する仕組みです。インターフェースを使用すると、多重継承のような柔軟な設計が可能になります。
基本構文
interface Animal {
void makeSound();
}
class Dog implements Animal {
public void makeSound() {
System.out.println("Woof!");
}
}
2. 抽象クラスとは
抽象クラスは、一部のメソッドが実装されておらず、サブクラスで実装を強制するクラスです。
abstract class Vehicle {
abstract void move();
}
class Car extends Vehicle {
void move() {
System.out.println("Car is moving.");
}
}
3. インターフェースと抽象クラスの違い
- インターフェースはフィールドを持たず、メソッドのシグネチャのみを定義する。
- 抽象クラスはフィールドや具体的なメソッドを持つことができる。
4. デフォルトメソッドと静的メソッド
Java 8以降、インターフェースにdefaultメソッドやstaticメソッドを定義できるようになりました。
interface Calculator {
default int add(int a, int b) {
return a + b;
}
static void showVersion() {
System.out.println("Calculator v1.0");
}
}
5. 複数のインターフェースを実装
interface Flyable {
void fly();
}
interface Swimmable {
void swim();
}
class Duck implements Flyable, Swimmable {
public void fly() {
System.out.println("Duck is flying.");
}
public void swim() {
System.out.println("Duck is swimming.");
}
}
6. インターフェースの継承
インターフェース同士も継承が可能です。
interface Animal {
void eat();
}
interface Mammal extends Animal {
void walk();
}
7. 具体的な使用例
インターフェースを使った設計パターンの例として、「ストラテジーパターン」を紹介します。
interface PaymentStrategy {
void pay(int amount);
}
class CreditCardPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Paid " + amount + " using Credit Card.");
}
}
class PayPalPayment implements PaymentStrategy {
public void pay(int amount) {
System.out.println("Paid " + amount + " using PayPal.");
}
}
8. まとめ
インターフェースと抽象クラスの違いを理解し、適切に使い分けることで、柔軟な設計が可能になります。
9. 演習問題
Shapeインターフェースを作成し、CircleとRectangleクラスで実装してください。- 抽象クラス
Transportを作成し、CarとBicycleで拡張してください。

コメント