Entra

View Full Version : [JAVA]modificatori PUBLIC, PRIVATE, PROTECTED


skyblu_angel
23-02-2010, 13:49
Come da titolo, vorrei sapere bene le differenze tra i modificatori: PUBLIC, PRIVATE, PROTECTED.

Possibilmente facendomi degli esempi banali di codice java. :oink:

Ringrazio in anticipo :D

javacomelava
23-02-2010, 14:27
public:

puoi accedere al campo/metodo dichiarato con modificatore public da qualsiasi classe esterna alla classe in cui il campo/metodo pubblico è dichiarato(è pubblico)


private:

puoi accedere al campo/metodo dichiarato con modificatore private, solo dalla stessa classe in cui il campo o il metodo è dichiarato(è privato)


protected:

puoi accedere al campo/metodo dichiarato con modificatore protected solo da classi che sono in rapporto di ereditarietà con la classe che dichiara il campo/metodo protected(protetto).

P.s.: Questo in linea di massima.Sul modificatore protected forse c'e' qualcosa da aggiungere,ma su google trovi davvero di tutto!

ciao

wingman87
23-02-2010, 14:33
Provo a spiegartelo in maniera informale con degli esempi. Considera ogni classe in un file a sé.
PUBLIC
public class A{
public int a;
}
public class B{
public static void main(String[] args){
A ogg=new A();
ogg.a=10; //Accedo direttamente al membro a
}
}
PRIVATE
public class A{
private int a;
public void setA(int val){if(val>=0) a=val;}
public int getA(){return a;}
}
public class B{
public static void main(String[] args){
A ogg=new A();
//ogg.a=10; Il compilatore mi darebbe errore perché a non è accessibile
ogg.setA(10);
ogg.setA(-1); //Il metodo setter impedisce il settaggio di valori negativi (è un esempio)
System.out.println(ogg.getA()); //Stamperà 10
}
}
PROTECTED
Non l'ho ancora mai usato in qualche progetto, quindi non prendere per oro colato questi esempi
package mio.package;
public class A{
protected int a;
}
package mio.package;
public class B{
public static void main(String[] args){
A ogg=new A();
ogg.a=10; //Posso accedere al membro a perché A è nello stesso package di B
}
}
package tuo.package;
public class B{
public static void main(String[] args){
A ogg=new A();
ogg.a=10; //Errore di compilazione, non posso accedere al membro a perché A si trova in un altro package
}
}
package suo.package;
public class B extends A{
public static void main(String[] args){
A ogg=new A();
ogg.a=10; //Posso accedere al membro a perché anche se A si trova in un altro package B la estende
}
}

Aggiungo questo link dove ci sono delle tabelle riassuntive:
http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html