javaSilver勉強にあたって、javaのインターフェースについてまとめてみた。
インターフェースには次のような特徴がある。
・公開するためのものなので、publicなメンバを定義する。
・インスタンス化できない。
・抽象メソッドを定義できる
・デフォルトメソッドとstaticメソッドとして実装を定義できる
・デフォルトメソッドとstaticメソッドから利用されることを想定し、privateな具象メソッドを定義できる。
・定数は定義できるが、フィールドは定義できない。
またインターフェースでは実装を持たない抽象メソッドの宣言で、abstractで修飾されていなくても、暗黙的にabstractであると解釈される。
例:
public String methodA();
finalで抽象メソッドを宣言できない。
finalは変更できないことを宣言するもので、この抽象メソッドはインターフェースを実現したクラスによってオーバーライドされるために存在する。つまり、変更されるのが前提であり、インターフェースに定義する抽象メソッドはfinalで修飾することができない
例:
final void methodB();
【デフォルトメソッドについて】
インターフェース内で「default」キーワードを使用して宣言され、具象メソッドとして機能します。
これにより、インターフェースを実装するクラスはデフォルトメソッドをオーバーライドすることなく使用することができます。
【staicメソッドについて】
staticメソッドもインターフェース内で宣言でき、インターフェース名を通じて、呼び出すことが可能です。
staticメソッドはインスタンスに依存しないため、インターフェースのインスタンス化なしに使用できます。
以下にデフォルトメソッドとstaticメソッドの例を示します。
public interface MyInterface {
// デフォルトメソッドの宣言
default void printGreeting() {
System.out.println("こんにちは、デフォルトメソッドです!");
}
// staticメソッドの宣言
static void printStaticGreeting() {
System.out.println("こんにちは、staticメソッドです!");
}
}
public class MyClass implements MyInterface {
// デフォルトメソッドをオーバーライドすることもできます
@Override
public void printGreeting() {
System.out.println("こんにちは、MyClassのデフォルトメソッドです!");
}
}
public class Test {
public static void main(String[] args) {
MyInterface myInterface = new MyClass();
myInterface.printGreeting(); // "こんにちは、MyClassのデフォルトメソッドです!" を出力
MyInterface.printStaticGreeting(); // "こんにちは、staticメソッドです!" を出力
}
}
※これらメソッドを使用する際は、名前の衝突や継承の問題に注意する必要があります。