LoginSignup
1
0

【java】インターフェースの特徴について

Posted at

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メソッドです!" を出力
    }
}

※これらメソッドを使用する際は、名前の衝突や継承の問題に注意する必要があります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0