2015-12-18 14 views
5

Quando si nasconde un campo statico, non c'è alcuna limitazione su quale livello di accesso ha il campo nella sottoclasse, può essere anche non statico e di altro tipo di dati.Perché Java limita il modificatore di accesso di un metodo di nascondimento

Dall'altro lato, quando si nasconde un metodo statico, il metodo statico dalla sottoclasse che nasconde il metodo statico dalla superclasse può consentire un accesso maggiore, ma non inferiore, del metodo nascosto.

AFAIK, il collegamento del metodo statico viene comunque eseguito in fase di compilazione, quindi perché esiste una tale limitazione?

P.S. La domanda è solo per curiosità.

+4

sospetti di Jon (I didn contrassegnalo come duplicato poiché la risposta lo conferma semplicemente in base a JLS, mentre la tua domanda è più sul perché JLS è progettato in questo modo): http://stackoverflow.com/questions/26963828/riducendo-il-visibilità-di-a -static metodo. Informazioni sui campi: non sono polimorfici (indipendentemente dal fatto che siano statici o meno, quindi non c'è motivo di limitarne l'intervallo). – Pshemo

+1

Preferita la pre-modifica del post –

+2

Ripristinata allo stato pre-modificato. Semplicemente non voglio che le persone capiscano la domanda come "Perché i campi sono consentiti e per i metodi no". – Bax

risposta

-2

Perché nella sottoclasse si sovrascrive il metodo della superclasse non privata ma i campi ombra. Per quanto riguarda l'impostazione più ampio livello di accesso - si sempre potrebbe scrivere qualcosa di simile

public void sublcassMethod() { 
    supersecretSuperclassMethod(); 
} 

quindi non c'è alcun senso di limitare l'override con un accesso più ampio a livello di linguaggio - tale restrizione può essere facile impegna

+0

La domanda riguarda i metodi statici. – chrylis

+0

sì, lo so. Ma eclissi in tale situazione ci dirà "- Non può ridurre la visibilità del metodo ereditato da Superclass". Quindi penso che il meccanismo di ereditarietà sia lo stesso indipendentemente dal metodo statico o non statico. –

+0

non dimenticare che è possibile chiamare il metodo statico sull'oggetto. Quindi penso di omettere il fraintendimento che la chiamata al metodo statico, nel metodo statico e non statico di Java ha lo stesso meccanismo di ereditarietà. –

Problemi correlati