Wir haben bereits gute Antworten, hier sind meine 5 Cent:
sowohl statische als auch nicht-statische innere Klassen verwendet werden, wenn wir logische Funktionalitäten noch die Methoden und Variablen der äußeren Klasse trennen müssen verwenden. Beide inneren Klassen haben Zugriff auf die privaten Variablen der äußeren Klasse.
Vorteile der statischen inneren Klasse: 1) statische Klassen die statischen Variablen aus äußeren Klasse zugreifen können 2) statische Klassen wie eine unabhängige Klasse behandelt werden
nicht-statische innere Klasse: use 1) nicht
0123: static Mitglieder der äußeren Klasse 2) kann nicht wie eine unabhängige Klasse
public class NestedClassDemo {
private int a = 100;
int b = 200;
private static int c = 500;
public NestedClassDemo() {
TestInnerStatic teststat = new TestInnerStatic();
System.out.println("const of NestedClassDemo, a is:"+a+", b is:"+b+".."+teststat.teststat_a);
}
public String getTask1(){
return new TestInnerClass().getTask1();
}
public String getTask2(){
return getTask1();
}
class TestInnerClass{
int test_a = 10;
TestInnerClass() {
System.out.println("const of testinner private member of outerlcass"+a+"..."+c);
}
String getTask1(){
return "task1 from inner:"+test_a+","+a;
}
}
static class TestInnerStatic{
int teststat_a = 20;
public TestInnerStatic() {
System.out.println("const of testinnerstat:"+teststat_a+" member of outer:"+c);
}
String getTask1stat(){
return "task1 from inner stat:"+teststat_a+","+c;
}
}
public static void main(String[] args){
TestInnerStatic teststat = new TestInnerStatic();
System.out.println(teststat.teststat_a);
NestedClassDemo nestdemo = new NestedClassDemo();
System.out.println(nestdemo.getTask1()+"...."+nestdemo.getTask2());
}
}
Zugriff auf die statische innere und nicht-statische innere Klasse von außen behandelt werden
public class TestClass {
public static void main(String[] args){
NestedClassDemo.TestInnerClass a = new NestedClassDemo().new TestInnerClass();
NestedClassDemo.TestInnerStatic b = new NestedClassDemo.TestInnerStatic();
}
}
Der offizielle Java-doc für statische innere Klasse kann bei https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
möglich Duplikat [Java inneren Klasse und statischer verschachtelter Klasse] (http://stackoverflow.com/questions/70324/java-inner- finden class-and-static-nested-class) – andyb
Die verknüpfte Frage ist * nicht * ein Duplikat - sie weist nicht auf Vor- oder Nachteile hin, eine innere Klasse statisch zu machen. – Perception
mögliche Duplikate von [Statisch verschachtelte Klasse in Java, warum?] (Http://stackoverflow.com/questions/253492/static-nested-class-in-java-why) – fglez