Advanced Java Services | member classes in interfaces |
Klassen in Interfaces sind zugegebenermaßen seltene Gebilde, werden hier aber der Vollständigkeit halber mit aufgenommen. Man kann vermuten, daß eine Klasse in einem Interface den Rang der Konstanten eines Interfaces besitzt. Dementsprechende Beispielprogramme bestätigen dies. Eine nested class in einem interface ist immer public und statisch:
public class EnclosingFaceImpl implements EnclosingFace { // anonymous initializer { EnclosingFace.InnerClass ei = new EnclosingFace.InnerClass(); ei.method2(); ic.method2(); } public void method1() { } } interface EnclosingFace { int a = 17; //InnerClass ic ; // compile time error: = expected InnerClass ic = new InnerClass(); void method1(); class InnerClass // implizit public und static { int b = a ; public InnerClass() { } public void method2() { } } }
Auch für diese Situation finden sich Beispiele in der API.
Package | Umschließendes Interface | nested class |
---|---|---|
javax.sound.sampled | DataLine | public static class DataLine.Info |
javax.sound.sampled | Line | public static class Line.Info |
javax.sound.sampled | Mixer | public static class Mixer.Info |
javax.sound.sampled | Port | public static class Port.Info |
Interfaces in Interfaces sind ebenfalls eher seltene Gebilde und werden auch der Vollständigkeit halber mit aufgenommen. Sie sind ebenso wie Klassen in Interfaces implizit public und static. Dementsprechende Beispielprogramme bestätigen dies. Studieren Sie das folgende Beispiel.
class EnclosingFaceImpl implements EnclosingFace, EnclosingFace.NestedFace { public void method1() { } public void method2() { } } interface EnclosingFace { double alpha = Math.PI/6; void method1(); interface NestedFace { double beta = 2*alpha; void method2(); } }
Auch für diese Situation finden sich Beispiele in der API.
Package | Umschließendes Interface | nested interface |
---|---|---|
javax.swing.text |
Highlighter |
public static interface Highlighter.Highlight |
public static interface Highlighter.HighlightPainter | ||
javax.util | Map | public static interface classMap.Entry |
Der Compiler speichert jede Klasse bzw. jedes Interface als eigene Datei. Für das einleitende Beispiel erzeugt der Compiler die folgenden Dateien: