Im folgenden Code können wir beweisen, dass Interfaces statische Klasse und nicht statische Klasse innerhalb deklariert werden können (statische geschachtelte Klasse und innere Klasse). OK, nicht neu. Aber was ist der Unterschied zwischen "verschachtelten" und "inneren" Klassen (innerhalb von Interfaces), wenn die "innere" Klasse eine Instanz ohne eine Instanz der äußeren Klasse haben kann, selbst in den Interface Implementierungen (MyInterfImpl im folgenden Code) ?Was ist der Unterschied zwischen statischen Klassen und nicht statischen Klassen innerhalb von Interfaces?
public class NewTest {
public static void main(String[] args) {
// OK Compilation Fail on next line, here we can't have an Instance of inner class because we don't have
// instance of outer class, nothing strange to me
MyClass.MyInner inner = new MyClass.MyInner(); //COMPILE FAIL: must be new MyClass().new MyInner() instead
MyClass.MyNested nested = new MyClass.MyNested(); // OK here, its nested
MyInterf.MyInner inner2 = new MyInterf.MyInner(); // HERE, MyInner is Inner class, ins't it?
MyInterf.MyNested nested2 = new MyInterf.MyNested(); // OK here, its nested
MyInterfImpl.MyInner inner3 = new MyInterfImpl.MyInner(); // // HERE, MyInner is Inner class, ins't it?
MyInterfImpl.MyNested nested3 = new MyInterfImpl.MyNested(); // // OK here, its nested
}
}
interface MyInterf{
public static class MyNested{
} // end
public class MyInner{
}//
// some abstract methods....
}
class MyClass{
public static class MyNested{
} // end
public class MyInner{
}// end
}
class MyInterfImpl implements MyInterf{
}
Klasse in einer Schnittstelle? common .. AFAIK, 'public' und' static' Modifikatoren sind in einer Schnittstelle überflüssig –
Hallo ich bin mir nicht sicher, ob ich deine Frage richtig verstanden habe, also lass es mich bitte wissen. Der allgemeine Vertrag für die Verwendung von statischen Methoden erfordert nicht das neue Schlüsselwort, das zum Erstellen von Instanzen konzipiert ist. so könnten wir MyClass.MyInner() erwarten; zu funktionieren, aber es wird auch nicht kompilieren, da MyInner nicht statisch ist, und dann sollte es nur mit Instanzen Bereich verfügbar sein, dann wird es wieder funktionieren mit: new MyClass(). MyInner(); Auf der anderen Seite wird neue MyInterf.MyNested() funktionieren, weil Schnittstellen Dinge implizit als statisch deklariert. (wie Thufir auch sagte) Hoffe, dass das hilft –