28 Stimmen

Innere Klasse in Schnittstelle vs. in Klasse

Was ist der Unterschied zwischen diesen beiden innerclass-Deklarationen? Welche Vorteile/Nachteile gibt es?

Fall A: Klasse innerhalb einer Klasse.

public class Levels {   
  static public class Items {
    public String value;
    public String path;

    public String getValue() {
      return value;}
  }
}

und Fall B: Klasse innerhalb der Schnittstelle.

public interface Levels{

  public class Items {
    public String value;
    public String path;

    public String getValue() {
      return value;}
  }
}

Korrektur: Platzierung der Methode getvalue.

weitere Infos: Ich bin in der Lage, die Klasse Items in beiden Fällen A und B in einer anderen Klasse zu instanziieren, die die Schnittstelle überhaupt nicht implementiert.

public class Z{//NOTE: NO INTERFACE IMPLEMENTED here!!!!
 Levels.Items items = new Levels.Items();
}

Da eine Schnittstelle nicht instanziiert wird, sind alle Elemente innerhalb einer Schnittstelle durch die Punktnotation zugänglich, ohne dass LEVELS Schnittstelle instanziiert wird, einfach weil man eine Schnittstelle nicht instanziieren kann - was eine Klasse, die innerhalb einer Schnittstelle definiert ist, für statische Referenzen durchlässig macht.

Die Aussage, dass die Klasse Items im Fall B nicht statisch ist, macht also keinen Sinn. Da beide Fälle A und B auf die gleiche Weise instanziiert werden, bin ich nicht auf der Suche nach der Semantik, was statisch, innerlich oder verschachtelt ist. Hören Sie auf, mir Antworten zur Semantik zu geben. Ich will die Compiler-, Laufzeit- und Verhaltensunterschiede/Vorteile, oder wenn keine, dann sagen Sie es. Keine weiteren Antworten zur Semantik bitte!!!!! Ein Experte für JVM- oder .NET-VM-Spezifikationen sollte bitte diese Frage beantworten und nicht mit Lehrbuchsemantiken.

0voto

BlueTrin Punkte 8864

Ich dachte, dass die erste eine Klasse Levels und eine statische innere Klasse namens Items deklarieren würde. Items könnte von Levels.Items referenziert werden und würde statisch sein.

Im zweiten Fall wird eine einfache innere Klasse deklariert, auf die über Levels.Items zugegriffen werden kann, wie im Folgenden dargestellt:

Levels.Items hello = new Levels.Items();

EDIT: Das ist völlig falsch, lesen Sie die Kommentare und andere Antworten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X