Java Interfaceでは、最終変数のみを使用できます。Interfaceで静的変数を作成することもできます。ただし、インターフェイスは静的メソッド専用であるため、同時に静的/最終メソッドを作成することはできません。
インターフェイスで静的/最終メソッドを許可しない理由は正確には何ですか?
最後のメソッドはオーバーライドできません。これは、実際にメソッドを実装できない場合に、インターフェースを持つという目的に反します。
静的部分については、この質問を参照してください。
間違えている。
すべての変数は、インターフェイスで暗黙的に public static および final です。
Java 8 より前では、インターフェースで静的メソッドを作成することはできません。すべてのメソッドはインスタンス メソッドです。
インターフェースの唯一の目的は、それらを実装するクラスを持つことであり、インターフェースのメソッドは実装を持つことができないため、それらを final にすることは意味がありません: それらには実装がなく、オーバーライドできません。
インターフェイスは、静的ではなく、インスタンスに対して定義されます。
「最終」は「上書きできない」という意味です。これは、インターフェイスにはまったく意味がありません。
final
オーバーライドできないことを意味します。
static
クラス名を使用してのみ呼び出すことができることを意味します。インターフェイスには複数の実装があるため、インターフェイスはメソッド自体を実装できないため、どの実装を選択するかをどのように知るのでしょうか?
それらは、何らかのクラスによって実装されるインターフェイスにあるためです。どこにも実装できないメソッドのポイントは何でしょうか? (これはfinalが示唆するものです)
Why Interface methods cannot be “static” & “final”?
インターフェイス内のすべてのメソッドは明示的に抽象化されているため、静的メソッドまたは最終メソッドは抽象化できないため、それらを静的または最終として定義することはできません。
インターフェイスは純粋な抽象クラスです。したがって、インターフェース内のすべてのメソッドは でabtract
あり、子クラスに実装する必要があります。したがって、拡張により、それらのどれも として宣言できませんfinal
。
1: final メソッドを宣言することはできません。なぜなら、final メソッドはオーバーライドできないというルールに反するからです。ただし、実装されたクラスのすべてのインターフェイス メソッドを常に定義する必要があります。
2: 静的メソッドを宣言することはできません。なぜなら、静的メソッドは常にメソッド本体を必要とするが、インターフェイス内でメソッドを定義できないというルールに反するからです。
まあ、静的メソッドはインスタンスではなくクラスで機能するので、奇妙な/無意味です。何らかの理由でこれが必要だったと言っていましたが、今は思い出せないので、ずっと前のことだったに違いありません.
ただし、インターフェイスを使用してクラスを宣言できるため、これを「回避」できます(むしろ代替のAPI設計)。次のようになります。
interface MyInterface {
static class Helpers {
static void myStaticMethod(); //can be abstract etc as usual
}
}
もちろん、そのクラスなどを通常どおりサブクラス化するだけでなく、抽象化、抽象メソッドなどにすることもできます。
インターフェイス インスタンス メソッドのメソッドのため、インターフェイスのメソッドを static として宣言することはできません。また、実装されたクラスでインターフェイスのメソッドをオーバーライドする必要があるため、final を宣言することもできません。説明については、このリンクを確認してくださいここにリンクの説明を入力してください