これら 2 つの内部クラス宣言の違いは何ですか? また、長所/短所についてコメントしますか?
ケース A: クラス内のクラス。
public class Levels {
static public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
ケース B: インターフェイス内のクラス。
public interface Levels{
public class Items {
public String value;
public String path;
public String getValue() {
return value;}
}
}
修正: getvalue メソッドの配置。
詳細情報: インターフェイス AT ALL を実装していない別のクラスで、ケース A と B の両方で Items クラスをインスタンス化できます。
public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
Levels.Items items = new Levels.Items();
}
インターフェースはインスタンス化されていないため、インターフェースをインスタンス化できないという理由だけでインスタンス化された LEVELS インターフェースなしで、インターフェース内のすべての要素にドット表記でアクセスできます。事実上、インターフェース内で定義されたクラスを静的参照に対して透過的にします。
したがって、 B が静的でない場合の Items クラスと言っても意味がありません。A と B の両方のケースが同じ方法でインスタンス化されるため、静的、内部、またはネストされたものに関するセマンティクスを探しているわけではありません。セマンティクスに関する回答はやめてください。コンパイラ、ランタイム、および動作の違い/利点が必要です。ない場合は、そう言います。セマンティクスに関するこれ以上の回答はありません!!!!! JVM または .NET VM 仕様内部の専門家は、教科書の意味論者ではなく、この質問に答えてください。