なぜ外部クラスには、静的することができませんか?
私はクラスが定義静的であると仮定しました。しかし、インタビュアーが、これはそうではないと答えは、コンパイラレベルであることを述べました。教えてください。
どこにでもあっても、このフォーラム上のすべてのotevtは「それは意味がないので、単純に不可能です」。それは質問に答えていません。なぜコンパイラはそれを禁じていますか?
クラスで使用する場合、static
唯一の入れ子になったクラスのために許可され、そのコンパイラによって課されます。
[OK]を、コンパイラが許可していないことをstatic
コンパイルしようとすると、構文エラーを取得する理由トップレベルのクラスの説明static
トップレベルのクラスを。しかし、なぜコンパイラは、そうですか?
(ではない入れ子になったクラスのJavaにおけるインナークラスstatic
-を参照してJava言語仕様が)親クラスへの参照を持っている、それだけでその親クラスのオブジェクトと一緒に存在しています。それがある場合でも、public
と持っているpublic
コンストラクタを、そのインスタンスは、親クラスのインスタンスのコンテキストなしで外で/を作成することはできません。
時には、この動作は不要であり、それはのように入れ子になったクラスを宣言することにより、「オフ」することができますstatic
。これは、他の用途に沿ったものであるstatic
:属性およびメソッド、キーワードのstatic
マーククラスレベルのメンバー、その不在は、インスタンスレベル部材を示しています。
トップレベル(または外)クラスの場合、これはそう、まったく意味がありませんstatic
が許可されていません。