2011-02-01 5 views
6

Ho alcune situazioni che voglio usare la classe interna di un'altra classe in un'altra classe. come ...come usare la classe annidata in un'altra classe in java?

public class ListData { 
    public static class MyData { 

     public String textSongName, textArtistName, textDuration, textDownloadPath, 
       textSongSize, textAlbumName, textUrl; 
     public boolean enable; 

     public MyData(String songName, String artistName, String duration, 
       String downloadPath, String songSize, String albumName, 
       String url, boolean e) { 
      textSongName = songName; 
      textArtistName = artistName; 
      textDuration = duration; 
      textDownloadPath = downloadPath; 
      textSongSize = songSize; 
      textAlbumName = albumName; 
      textUrl = url; 
      enable = e; 
     } 
    } 

} 

ora voglio utilizzare la classe Mydata in un altro.

come posso fare questo?

Grazie.

+3

Per favore, puoi riformattare il tuo esempio per evitare conflitti nome e per correggere rientro? – Nicolas

+0

Puoi, ma non pensi che dovresti renderlo di primo livello. (Btw: terminology post-1.1 è una classe nidificata per una "classe interna statica". Classe interna per classi nidificate non statiche.) –

risposta

21
ListData.MyData myData = new ListData.MyData(); 
+0

Le classi nidificate sono come se esistessero nell'ambito della classe esterna? –

+0

No. Qui, MyData è una classe interna statica. L'ID non dipende dalla classe genitore e non ha accesso agli interni della classe limitata. Ho corretto un errore, causato da una formattazione errata. –

+0

(Ci scusiamo per il commento precedente, abbiamo mancato la statica nella dichiarazione della classe interna.) Le classi interne non statiche sono entro i limiti della loro classe esterna, infatti non è possibile avere un'istanza dell'interno senza una di quelle esterne. Le classi interne statiche sono incapsulate all'interno della loro classe di inclusione ma non contengono alcun riferimento ad essa, si comportano essenzialmente come classi separate altrimenti. – berry120

19

classi annidate statiche

OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); 

Classi interne

OuterClass.InnerClass innerObject = outerObject.new InnerClass(); 

More about Nested Classes

2

Se si può creare l'oggetto classe interna da altra classe che è fuori portata dalla classe racchiude di quanto si dovrebbe usare il suo nome completo .... Qui, la tua classe esterna è ListData e la tua classe Inner è Mydata e chiamiamo Mydata da un'altra classe es. YourData .. di quanto possiamo usare sotto la dichiarazione ..

Sintassi: outerclass.innerclass = new outerclass.innerclass();

=>ListData.MyData objectname = new ListData.MyData();

NOTA: questo può utilizzare solo quando la classe innner è statica ..