抽象クラスでのインターフェース
-
21-12-2019 - |
質問
抽象クラス内のインターフェースを宣言することは可能ですか?。私はこれを試してみました、そして私はコンパイルエラーなしでそれをすることができましたか?実用的な使用法では、これに重要な意味がありますか?
これは私が書いたコードです。
public abstract class X
{
public interface abc extends I1
{
public void sum(int i,int j);
}
}
public class Impl extends X
{
class InnerImpl implements abc
{
@Override
public int sum(int i, int j)
{
return i+j;
}
}
}
public interface I1
{
}
. 解決
クラス内のインタフェースを宣言することができます。インターフェイスは暗黙的にstatic
であるため、囲むクラスは名前空間の範囲を提供するだけで、その他の点ではインターフェイスとは無関係です。
このようなユーティリティは確実に存在し、私はそれを多くの機会に使った。多くの場合、インタフェースは同じクラスのメソッドに結合されているので、クライアントはそのインタフェースの実装をメソッドに合格できます。
Java 8と機能インタフェースの種類では、ローカルインタフェースの拡散は増加しか増加しません。
他のヒント
はい可能です。あなたが言ったように - それはコンパイル(そして私は想像して想像しています)されているので、それは合法です。
実際、インターフェイスでサブインターフェイスを宣言するのは合法です(プライベートメソッドと同じように、インタフェースには意味がないため、インタフェースには意味がありません)。
実用的な用途は以下のとおりです。 あなたはあなたの抽象クラスのプライベートインナークラスを宣言して、抽象クラスのメソッドでそれを使うことができます(私はあなたがそのための使い方を考えることができることを願っています)。またはそのうちの2つ。また、共有契約が両方に必要な場合 - インターフェースを使用できます。それとも、親クラスの外で理解しない特定のことを返す必要があります。
より低い最後の例は、インタフェースMap
とそれはサブインタフェースMap.Entry
です。 Map
ReturnとEntry
のいくつかのメソッドは、Map
なしでは無意味ですが、スタンドアロンインタフェースではありません。 Map
がインターフェースではなく抽象クラスである場合は、あなたが説明した状況が正確にあります。