Dies erlaubt ist:Java Outer-Klasse erweitert statische innere Klasse
public class Outer {
public static class Inner extends Outer { }
}
aber das ist nicht:
public class Outer extends Inner {
public static class Inner { }
}
Im zweiten Fall der Compiler von Cyclic inheritance involving package.Outer
beschwert. Ich sehe keine Zyklen; Warum ist der zweite Fall nicht gültig?
Dies verhält sich gleich ob Inneres class
, abstract class
oder interface
ist.
Der Anwendungsfall ist für eine rekursive Datenstruktur - ein Symbol-Namespace. Grundsätzlich möchte ich die Benennungsstruktur von Namespace extends Namespace.Member
, MyDataChunk extends Namespace.Member
; jeder Namespace
würde sich wie eine Karte von String
bis Namespace.Member
verhalten, was es ermöglicht, mehrere Ebenen von Namespace
, die mit einer MyDataChunk
enden, zu rekursiv zu machen.
Sie sehen keine Zyklen, dies ist jedoch für eine rekursive Datenstruktur. Dies scheint zu widersprechen. Siehe auch http://stackoverflow.com/questions/33918022/cyclic-inheritance-and-interfaces-class-a-cant-implement-class-b-interface-wh – Tunaki
@Tunaki Wenn ich es richtig lese, Die Typen sollte nicht Radfahren sein; die tatsächliche Rekursion ist noch nicht einmal in einem Member von 'Map'). –
CAD97
@Tunaki Zyklische Vererbung ist 'A erweitert B' und' B erweitert A', und eine rekursive Datenstruktur ist 'A {member A}'. Zum obigen Code sollte keiner vorhanden sein, wenn ich richtig lese, obwohl sich der Compiler über Ersteres beschwert. – CAD97