View Full Version : [JAVA] Classi annidate e visibilità
wingman87
15-02-2008, 10:30
Come funziona la visibilità delle classi annidate e delle loro funzioni? Ad esempio:
public class Contenitore{
...
private class Contenuto{
...
public void unaFunzione(){
...
}
}
}
Se cambio la parte in rosso in private cambia qualcosa?
Come funziona la visibilità delle classi annidate e delle loro funzioni? Ad esempio:
public class Contenitore{
...
private class Contenuto{
...
public void unaFunzione(){
...
}
}
}
Se cambio la parte in rosso in private cambia qualcosa?Contenuto è una inner class private, quindi è visibile sono all'interno di Contenitore.
Essendo una inner class, c'è una relazione "particolare" tra Contenuto e Contenitore, tale per cui Contenitore può accedere a tutti i membri di Contenuto, pure quelli private.
Ma vale anche per altre inner class. Ecco un esempio:
public class Prova
{
public static void main (String[] args)
{
Prova p = new Prova ();
p.prova ();
}
public void prova ()
{
Inner i = new Inner ();
i.test1 (); // OK
i.test2 (); // OK, anche se private
Inner2 i2 = new Inner2 ();
i2.test_a (i);
}
private class Inner
{
public void test1 () { System.out.println ("test1"); }
private void test2 () { System.out.println ("test2"); }
}
private class Inner2
{
public void test_a (Inner i)
{
i.test1(); // OK
i.test2(); // OK, anche se private!!!
}
}
}
wingman87
15-02-2008, 18:14
Ma quindi non cambia nulla se metto private o public nelle funzioni?
Se invece la innerclass è public e la classe Contenitore è public posso instanziare la innerclass anche da classi esterne a Contenitore?
certo che si puo istanziare , la sintasi e + o - questa
Contenitore contenitore = new Contenitore();
Contenitore.Contenuto contenuto = contenitore .new Contenuto ();
poi x gli array
Contenitore contenitore = new Contenitore();
Contenitore.Contenuto [] contenuto =new Contenitore.Contenuto[lenght];
contenuto [indice] = contenitore .new Contenuto ();
wingman87
16-02-2008, 00:29
Ok, grazie!
Un'ultima domanda: quindi quando voi scrivete delle innerclass private poi i metodi e le variabili d'istanza come li dichiarate? Non mettete nulla? A sto punto mi sembra la soluzione più ovvia...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.