|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
[JAVA] Classi annidate e visibilità
Come funziona la visibilità delle classi annidate e delle loro funzioni? Ad esempio:
Codice:
public class Contenitore{
...
private class Contenuto{
...
public void unaFunzione(){
...
}
}
}
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
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: Codice:
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!!!
}
}
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
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? |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Jan 2008
Città: roma
Messaggi: 296
|
certo che si puo istanziare , la sintasi e + o - questa
Codice:
Contenitore contenitore = new Contenitore(); Contenitore.Contenuto contenuto = contenitore .new Contenuto (); Codice:
Contenitore contenitore = new Contenitore();
Contenitore.Contenuto [] contenuto =new Contenitore.Contenuto[lenght];
contenuto [indice] = contenitore .new Contenuto ();
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
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... |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:26.




















