come regola generale che ogni classe (ed interfaccia) deve essere definita in un file che deve avere il medesimo nome della classe
eccezioni:
- classi ed interfacce inner
classe definita in modo analogo ad ogni altra classe ma la cui definizione non si trova in un file separato ma viene riportata all’interno di un’altra classe
può essere definita ovunque nel corpo di una classe ma all’esterno del corpo dei metodi (altrimenti é locale)
rispetto alle classi normali é possibile specificare anche se la classe é static
all'interno della classe principale si creereannooggetti nella classe inner utilizzando i suoi metodi
- classi local (locali)
definite direttamente all’interno di blocchi di codice (metodi)
devono essere considerate locali al blocco in cui sono definite
- classi anonymous
classe locale senza un nome assegnato
si tratta di una classe definita e instanziata un'unica volta attraverso una singola espressione caratterizzata da una versione estesa della sintassi dell'operatore new
sintassi:
class Enclosing
{
...
class Inner
{
...
}
static class InnerStatic
{
...
}
interface InnerInterface
{
...
}
public void metod(...)
{
...
class LocalClass
{
...
}
}
}
esempio: utilizzo Inner class
class Outer_Demo
{
int num;
// definizione inner class
private class Inner_Demo
{
public void print()
{
System.out.println("Questa é una inner class");
}
}
// acesso alla inner dal metodo
void display_Inner()
{
Inner_Demo inner = new Inner_Demo(); creo oggetto
inner.print(); uso metodo print
}
}
classe con main
public class My_class
{
public static void main(String args[])
{
// creo oggetto classe Outer_Demo
Outer_Demo outer = new Outer_Demo();
// uso del metodo display_Inner
outer.display_Inner();
}
}