2015-12-18 6 views
5

静的フィールドを非表示にすると、そのフィールドがサブクラスでどのようなアクセスレベルにあるかに制限はなく、非静的でも他のデータ型でも可能です。Javaが非表示のメソッドのアクセス修飾子を制限するのはなぜですか?

一方、静的メソッドを隠すと、スーパークラスから静的メソッドを隠す静的メソッドは、隠されたメソッドよりも多くのアクセスを可能にしますが、そうではありません。

AFAIK、静的メソッドのリンクは、とにかくコンパイル時に実行されるため、なぜそのような制限がありますか?

P.S.疑問はちょうど好奇心からです。

+4

Jonの疑惑(Iのdidnを簡単にコミットすることができますなぜなら、なぜJLSがそのように設計されているのかということです):http://stackoverflow.com/questions/26963828/reducing-the-visibility-of-a -static-method。フィールドについて:それらはポリモフィックではありません(静的であるかどうかにかかわらず、変更の範囲を限定する点はありません)。 – Pshemo

+1

投稿の編集前に編集 –

+2

編集前の状態に復元されました。なぜ人々には「フィールドが許可され、メソッドが許可されないのか」という疑問を理解することは望ましくありません。 – Bax

答えて

-2

サブクラスで非プライベートスーパークラスメソッドをシャドウフィールドでオーバーライドするためです。より広範なアクセスレベルを設定するためとして - あなたはいつも

public void sublcassMethod() { 
    supersecretSuperclassMethod(); 
} 

のようなものを書くことができますので、言語レベルで、より広範なアクセスをオーバーライド制限しても意味がありません - そのような制限は

+0

質問は静的メソッドについてです。 – chrylis

+0

はい、わかります。しかし、このような状況では、 "スーパークラスから継承されたメソッドの可視性を減らすことはできません"と言います。だから私は、静的または非静的メソッドに関係なく継承メカニズムは同じだと思います。 –

+0

オブジェクトに対して静的メソッドを呼び出すことができることを忘れないでください。だから私は、静的メソッドの呼び出しは、Javaの静的メソッドと非静的メソッドでは、同じ継承メカニズムを持っている誤解を省略すると思います。 –

関連する問題