内部サブprotected
インターフェースを宣言することは良い習慣ですが、技術的にはJavaのインターフェースのように内部メソッドを宣言することはできません。
もちろん、パブリックインターフェイスを拡張する内部使用のための別のインターフェイスを作成できます。
package yourpackage;
public interface PublicInterface {
public void doThing1();
public void doThing2();
public void doThing3();
}
package yourpackage;
interface InternalInterface extends PublicInterface {
void doAnyInternalThing1();
void doAnyInternalThing2();
}
InternalInterface
パッケージ内のインターフェースを使用できますが、PublicInterface
(パブリックメソッド内の)サブタイプを受け入れる必要があります。
package yourpackage;
public class SomeClass {
public void someMethod(PublicInterface param) {
if (param instanceof InternalInterface) {
// run the optimized code
} else {
// run the general code
}
}
}
パッケージの外では、ユーザーはPublicInterface
問題なく使用できます。
通常、プログラマーは同様の状況で抽象クラスを作成します。ただし、この場合、多重継承の利点は失われます。