Domanda

Mi rendo conto che questa è una domanda molto semplice, ma è una che mi ha sempre infastidito. A quanto ho capito, se dichiari un campo privato in Java, allora non è visibile al di fuori di quella classe. Se è protetto, è disponibile per le classi ereditate e qualsiasi cosa nello stesso pacchetto (correggimi se una di queste definizioni non è corretta).

Questo significa che non è possibile dichiarare un campo accessibile solo alle classi ereditate e non ad altre classi non ereditate nello stesso pacchetto?

Apprezzo il fatto che ci siano modi per aggirare questo, ma ci sono casi in cui vorresti avere questo tipo di comportamento?

Ovviamente la domanda sopra si applica sia ai metodi che ai campi.

Mille grazie.

È stato utile?

Soluzione

Vedi: http://java.sun.com/ docs / libri / tutorial / java / javaOO / accesscontrol.html
Pacchetto > Sottoclassi, non puoi mai avere un campo visibile solo dalle sottoclassi ma non dalle classi dello stesso pacchetto.

Altri suggerimenti

In sostanza:

  • privato: accessibile solo dalla classe.
  • pubblico: accessibile da qualsiasi classe.
  • protetto: accessibile dalla classe, tutte le classi ereditate e le classi del pacchetto corrente (modificato) .
  • nessun ambito definito: accessibile da tutte le classi del pacchetto corrente.

maggiori informazioni qui .

Sì, l'accesso protetto di Java è un po 'strano in questo modo. Non riesco immediatamente a capire perché sia ??desiderabile. Personalmente non mi dà fastidio per campi poiché non mi piacciono i campi non privati ??(tranne le costanti) ma lo stesso vale per gli altri membri.

.NET non ha affatto il concetto di visibilità dell'accesso al pacchetto / spazio dei nomi, ma ha un'alternativa che è assembly (pensa " file jar " - non esattamente lo stesso, ma chiudi). Francamente mi piacerebbe avere le opzioni di visibilità dello spazio dei nomi e , ma sembra che io sia condannato alla delusione ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top