2014-04-15 12 views

risposta

22

Una sottoclasse può sempre ampliare il modificatore di accesso, perché è ancora una sostituzione valida per la super-classe. Dalla specifica Java su Requirements in Overriding and Hiding:

il modificatore di accesso (§6.6) di un primario o un metodo nascondere devono fornire almeno quanto l'accesso come il metodo override o nascosto, come segue:

  • Se il metodo sottoposto a override o nascosto è pubblico, quindi il metodo di esclusione o di occultamento deve essere pubblico; in caso contrario, si verifica un errore in fase di compilazione.
  • Se il metodo sottoposto a override o nascosto è protetto, il metodo di esclusione o di occultamento deve essere protetto o pubblico; in caso contrario, si verifica un errore in fase di compilazione.
  • Se il metodo sottoposto a override o nascosto ha accesso predefinito (pacchetto), il metodo di override o di occultamento non deve essere privato; in caso contrario, si verifica un errore in fase di compilazione.
2

Dal punto di vista di una classe esterna, il metodo pubblico è solo un nuovo metodo, non un metodo di primaria importanza, dal momento che la classe esterna non poteva accedere al metodo protetto in ogni modo.

D'altra parte, l'abbassamento della visibilità non è consentito perché la classe esterna può sempre utilizzare un riferimento del tipo di una super classe per fare riferimento a un oggetto della sottoclasse e chiamare lo stesso metodo.

0

La visibilità influisce solo sull'accessibilità esterna. Essendo un metodo public qualsiasi classe esterna può chiamarlo.

Il livello di accesso del metodo di esclusione non influisce sulla visibilità del metodo originale. Dopo l'override, con qualsiasi livello di accesso, è possibile accedere al metodo originale solo chiamando super nella sottoclasse.