Newsgroup: it.comp.java
Titolo: Classi interne statiche

Ciao a tutti, qualcuno mi aiuta a chiarirmi una cosa? La curiosità è
prettamente fine a se stessa, stavo facendo una prova e non mi torna
una cosa..
Ho questo codice:
public class xxx{
   public void metodoX(){
         JFrame mainCointainer = new JFrame();
         ....
         ....
         mainCointainer.addMouseListener(new
MouseHandlers.MouseButtonHandler());
   }
	}
	static class MouseHandlers{
		public static class MouseButtonHandler extends MouseAdapter{
			@Override
			public void mouseClicked(MouseEvent e) {
				super.mouseClicked(e);
				doSomething();
			}
		}
		public static class MouseMovingHandler extends MouseMotionAdapter{
			@Override
			public void mouseMoved(MouseEvent e) {
				super.mouseMoved(e);
                                doSomethingElse();
			}
		}
}
La cosa che non mi torna è nella riga che ripropongo qua:
mainCointainer.addMouseListener(new MouseHandlers.MouseButtonHandler
());
Perché devo usare new?? pena un errore di compilazione.. Sia
MouseHandlers   che la più interna MouseButtonHandler sono statiche!
ciao

 MouseHandlers   che la pi� interna MouseButtonHandler sono statiche!
E' statica la loro dichiarazione, non una loro istanza.
Se avessi una situazione del tipo:
public class xxx{
   static class MouseHandlers{
     public static MouseButtonHandler mbh = new MouseButtonHandler();
non ti servirebbe il new alla chiamata.
Spero di aver chiarito il tuo dubbio.

 > MouseHandlers   che la più interna MouseButtonHandler sono statiche!


 istanze di oggetti.. Perch� per una classe interna non � lo stesso?
Non proprio: tu accedi a attributi o metodi statici di una classe senza 
bisogno di istanziarla. Per� l'attributo deve essere istanziato.
La classe definisce la struttura dati e i modi di accedervi, l'oggetto 
ne � una istanza (unico nel caso delle "static").
IMHO stai confondendo l'oggetto con la classe.
Nel tuo primo esempio hai la (definizione della) classe:
public static class MouseButtonHandler extends MouseAdapter
ma da qualche parte l'oggetto MouseButtonHandler va creato.
Non a caso il compilatore te lo chiede.
Ciao.

 
Dal tutorial di Java....
*Static Nested Classes*
As with class methods and variables, a static nested class is associated 
with its outer class. And like static class methods, a static nested 
class cannot refer directly to instance variables or methods defined in 
its enclosing class ï¿½ it can use them only through an object reference.
     Note: A static nested class interacts with the instance members of 
its outer class (and other classes) just like any other top-level class. 
In effect, a static nested class is behaviorally a top-level class that 
has been nested in another top-level class for packaging convenience.
Static nested classes are accessed using the enclosing class name:
     OuterClass.StaticNestedClass
For example, to create an object for the static nested class, use this 
syntax:
     OuterClass.StaticNestedClass nestedObject = new 
OuterClass.StaticNestedClass();

 OuterClass.StaticNestedClass();
Grazie, è esattamente il caso che avevo portato. Mi linkeresti il
tutorial da dove lo hai estratto?
Grazie a tutti e due, ciao

 Grazie a tutti e due, ciao
Ciao

 Ciao
:)