次のコード スニペットでは、おそらく何らかのコンパイル エラーが発生するように見えますが、そうではありません。
class Outer {
public static class Inner {
static String obj = "Inner";
}
static Optional Inner = new Optional();
//The (inner) class name and the object name are same.
}
class Optional {
String obj = "Optional";
}
public class Main {
public static void main(String[] args) {
System.out.println(Outer.Inner.obj);
//Refers to the string inside the optional class
}
}
このクラスOuter
には、その中に という名前の静的クラスがありますInner
。さらに、クラスのオブジェクト (静的) を宣言しますOptional
( static Optional Inner = new Optional();
)
このオブジェクトとクラス名 ( class 内Outer
) は同じですInner
。プログラムが表示されますOptional
。Outer.Inner.obj
内の唯一の式main()
が表示されることが期待されますInner
が、表示されません。ただし、実際の出力はクラスOptional
の場合です。Optional
表示する 1 つの方法Inner
は、オブジェクト名を別のものに変更することです。
static Optional Inner1 = new Optional();
表示される出力から、型名 ( class Inner
) よりもオブジェクト名 (または変数) が選択されているように見えます。それらは同じ名前を持っているからです。ここで適用される正確なケースは何ですか?