Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Perché usare private o protected invece di public?

    Ciao a tutti.
    Non sono nuovo nel forum HTML ma in Java sì :-)

    So cosa sono, + o -, public, private e protected.
    In alcuni package ho messo public al posto di private o protectd e funzionano lo stesso.
    A questo punto perché usare private o protected se funziona anche con public?

    Inoltre ho letto nelle spiegazioni che mettendo private impedisce ai clienti (forse sbaglio la parola clienti, non ricordo bene).
    Ma i clienti sarebbero coloro che usa l'applicativo ultimato (cioè persone vere) o sono le classi stessi?

  2. #2
    Guarda che cos'e' l'encapsulation.

    Inoltre ti faccio un esempio:

    Diciamo che tu implementi una lista basata su array, e l'array lo dichiari attributo public della classe. Questo significa che chi usa la tua lista puo' far a meno di utilizzare i metodi della tua lista per aggiungere elementi, ma vanno a metterli direttamente nell'array a cui hanno accesso in quanto dichiarato pubblico.

    Domani pero' decidi di cambiare la tua lista, e invece di basarla sull'arrai fai una lista linkata.
    Da quel momento tutto il codice che usava direttamente l'array si rompera'.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    public --> permette l'accesso al campo da qualsiasi classe
    private --> permette l'accesso al campo solo dalla classe propria
    protected --> permette l'accesso al campo solo dalle classi dello stesso package (si usa moltissimo nell'ereditarietà)

    guardati l'incapsulazione e l'information hiding

    limitare l'accesso ai campi permette di limitare eventuali "danni", tipo una modifica accidentale

    è sempre consigliato dichiarare i campi come private e scrivere i metodi get/set per fare elaborazioni su di essi
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Naruto 92
    protected --> permette l'accesso al campo solo dalle classi dello stesso package
    Non solo ... anche a sotto-classi in altri package, tramite "ereditarietà" cioè solo per il fatto di ereditarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    sisi, anche sotto-classi. scusa la mia mancanza.
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  6. #6
    Grazie a tutti x l'aiuto!

    Encapsulamento cioè incapsulamento e information hiding?
    Appena posso ci guardo e magari poi capisco xchè!

    mxa:
    Hai scritto: Questo significa che chi usa la tua lista puo' ....
    Cioè sarebbe il programmatore che ha creato il package o anche altri programmatori?
    Se è il primo, non vedo il problema cioè basta stare attenti e quando tutto funziona si salva così come è?
    Se è il secondo, come può modificare i package creati da altri una volta che è convertito in .jar o simili?

    Naruto:
    Hai scritto: limitare l'accesso ai campi permette di limitare eventuali "danni", tipo una modifica accidentale.
    mmm...
    Poniamo che metto tutto private e faccio una modifica accidentale, non dovrebbe comunque funzionare male lo stesso?

    Spero che non vi disturbo con tutte queste domande...

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da ErPiotta71
    Cioè sarebbe il programmatore che ha creato il package o anche altri programmatori?
    Se è il primo, non vedo il problema cioè basta stare attenti e quando tutto funziona si salva così come è?
    Questo è "programmare alla catso"

    Originariamente inviato da ErPiotta71
    Se è il secondo, come può modificare i package creati da altri una volta che è convertito in .jar o simili?
    Non si tratta di modificare i package ma di usare una classe nel modo sbagliato.

    Originariamente inviato da ErPiotta71
    Poniamo che metto tutto private e faccio una modifica accidentale, non dovrebbe comunque funzionare male lo stesso?
    Esempio:
    codice:
    public class MyClass {
      private int x;
    
      public void setX(int x) {
         if (x < 0) { 
           x = 0;
         } else if (x > 100) {
           x = 100;
         }
     
         this.x = x;
      }
    }
    Come vedi il metodo setX verifica che il valore di x sia compreso tra 0 e 100 (eventualmente limitando gli estremi) e poi lo assegna all'attributo privato. Se l'attributo fosse public chi usa questa classe potrebbe lavorare direttamente su di esso e assegnargli un valore non previsto dalla logica del programma.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    si, potresti comunque creare dei danni causati dalla scrittura di codice malfunzionante, ma tieni presente che limiteresti il danno alla solo classe che utilizza quei campi e non anche ad altre classi/sotto-classi, il che è un'ottima cosa a livello di manutenzione del codice.
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  9. #9
    Ok, siete stati di grande aiuto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.