モジュールのレッスン (1/2)
インターフェース
抽象クラスには部分的に実装されたコードとインスタンス フィールドの両方を含めることができますが、Java の インターフェイスは純粋な動作の規約です。インターフェイスは、クラスが「何を」実行できるかを定義しますが、「どのように」実行するかは定義しません。
これにより、操作の定義と実際の実装を完全に切り離すことができます。
インターフェイスの定義 (interface)
interface キーワードを使用します。インターフェイスで宣言されたすべてのメソッドは、暗黙的に public および abstract になります (指定する必要はありません)。
interface Drivable {
void startEngine();
void stopEngine();
}インターフェースの実装 (implements)
クラスは implements キーワードを使用してインターフェイスを実装し、定義されたすべてのメソッドの実装 (本体を含む) を提供する必要があります。
class Motorcycle implements Drivable {
@Override
public void startEngine() {
System.out.println("Rombo del motore acceso!");
}
@Override
public void stopEngine() {
System.out.println("Motore spento.");
}
}インターフェースの利点
- 多重継承: Java では、クラスは親クラスを 1 つだけ拡張できますが (単一継承)、複数のインターフェイスを同時に実装できます。
Java
class HybridCar implements Drivable, Chargeable { ... } - 分離: インターフェイス タイプを使用して変数を定義できます。そのインターフェイスを実装する任意のオブジェクトをそのような変数に割り当てることができます。
Java
Drivable vehicle = new Motorcycle(); vehicle.startEngine();
インターフェースの定数
インターフェイスでは、フィールドを宣言できます。これらのフィールドは、これらの修飾子を指定しない場合でも、暗黙的に public static final (クラス定数を意味します) になります。したがって、宣言後すぐに初期化する必要があります。
interface PhysicsConstants {
double GRAVITY = 9.81; // Implicitly public static final
}デフォルトのメソッド (default)
Java 8 以降では、default キーワードを使用して、インターフェイス内のデフォルト実装でメソッドを定義できるようになりました。これらのメソッドは実装クラスにオーバーライドを強制せず、フォールバック動作を提供します。
interface Logger {
void log(String message);
// Default method with a body
default void logError(String message) {
log("ERROR: " + message);
}
}自分で試してみてください
void fly() メソッドを使用して Flyable インターフェイスを作成します。次に、Flyable を実装し、Flying を画面に出力する Bird クラスを実装します。
ヒントを表示
Flyableでは「void fly();」と書きます。 Bird クラスで、それを `@Override public void fly() { System.out.println('Flying'); でマークするメソッドを実装します。 }`。
3 回の試行後に解決策が利用可能になります
voiddraw()メソッドを使用してDrawableインターフェースを定義します。次に、Drawable を実装し、Drawing Rectangle を出力する Rectangle クラスを実装します。
ヒントを表示
インターフェースに `voiddraw();` を定義します。 Rectangle では、 `@Override public voiddraw() { System.out.println('Drawing Rectangle'); を使用します。 }`。
3 回の試行後に解決策が利用可能になります
void swim() メソッドを定義して、Swimmable インターフェイスを完成させます。次に、Flyable と Swimmable の両方を実装するように Duck クラスを完成させ、fly() メソッドで Flying を出力し、swim() メソッドで Swimming を出力します。
ヒントを表示
Swimmable 内で `void swim();` を宣言します。 「class Duckimplements Flyable, Swimmable」を宣言し、要求された文字列を出力する両方のメソッドを実装します。
3 回の試行後に解決策が利用可能になります