Advanced   Java   Services member classes in interfaces Back Next Up Home


Klassen 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.



Einige Beispiele aus der Klassenbibliothek
PackageUmschließendes Interfacenested 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

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.



Einige Beispiele aus der Klassenbibliothek
PackageUmschließendes Interfacenested interface
javax.swing.text
 
 
Highlighter
 
 
public static interface Highlighter.Highlight
public static interface Highlighter.HighlightPainter
javax.util Map public static interface classMap.Entry


Namen der BytecodeDateien

Der Compiler speichert jede Klasse bzw. jedes Interface als eigene Datei. Für das einleitende Beispiel erzeugt der Compiler die folgenden Dateien:

Valid XHTML 1.0 Strict top Back Next Up Home