home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Datentypen/Klassen

 

Datentypen

 

 

Java Klassen

Folgende Informationen sind in einer Klasse zu finden:

·         package

·         imports

·         Attribute

·         Methoden (mit Variablen und Parametern)

·         Konstruktoren

·         innere Klassen

 

Innere Klassen

Bei inneren Klassen werden 3 Arten unterschieden

·         Member classes (Mitgliedsklassen)

·         Lokale innere Klassen

·         Anonyme innere Klassen

 

Member Classes

Member Classes werden mit einem Klassennamen innerhalb der äußeren Klasse definiert.

package innere;

public class AuessereKlasse {
  
  public void machPrintln(){
    System.out.println("Die äußere Klasse gibt was aus");
  }
  
  public class InnereKlasse {
    public void machPrintln(){
      System.out.println("Die innere Klasse gibt was aus");
      GanzInnereKlasse gi = new GanzInnereKlasse();
      gi.machPrintln();
    }
    
    private class GanzInnereKlasse{
      public void machPrintln(){
        System.out.println("Die ganz innere Klasse gibt was aus");
      }
    }
    
  }

}

Instanziert wird die Klasse "InnereKlasse" sie wie folgt:

AuessereKlasse.InnereKlasse Innere =

new AuessereKlasse.InnereKlasse();

    

Lokale Klassen

Lokale Klassen werden innerhalb einer Methode deklariert und nur dort(!) verwendet. Sie verfügen über einen Klassennamen und können nur final Variablen der umgebenden Methode nutzen, auf Variablen die außerhalb der Methode stehen kann nicht zugegriffen werden.

package innere;

public class AndereAeussere {
  private int a = 0;
  public void machPrintln(){
    final int b = 0;
    System.out.println("Die äußere Klasse gibt was aus");
    
    class LokaleInnereKlasse {
      public void machPrintln(){
        System.out.println("Die lokale innere Klasse gibt was aus " + b);
      }
    }

    LokaleInnereKlasse innere = new LokaleInnereKlasse();
    innere.machPrintln();
  }

}

Es sind keine Modifier für lokale Klassen erlaubt.

>Als Modifier werden Schlüsselwörter wie public oder private zusammen mit bestimmten Programmelementen bezeichnet (Methoden, Attribute etc. in dem Fall nicht die Klasse selbst). Mithilfe dieser Attribute können Eigenschaften von Klassen, Methoden und Variablen verändert werden.

 

Anonyme Klassen

Die Instanz hat keinen eigenen Namen, d.h. es wird keine Variable der anonymen Klasse definiert. Sie werden wie lokale Klassen innerhalb einer Methode deklariert. Syntaktisch unterscheidet sich die anonyme Klasse von der Instanzierung einer vordefinierten Klasse dadurch, dass nach dem new KlassenName(...) nicht ein Semikolon, sondern eine geschweifte Klammer steht.

package progstruk.innerclasses;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class AnonymeInnere extends JPanel {

  public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JButton b = new JButton("Ende");
    frame.add(b);

    //Anonyme Klasse
    b.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    });
    
    /*Alternativ: Lokale Klasse
    ActionListener al = new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        System.exit(0);
      }
    };
    b.addActionListener(al);
    */
    frame.pack();
    frame.setVisible(true);
  }
}


Wird bei der Definition der anonymen Klassen als Klassenname ein Name eines Interfaces angegeben, implementiert die anonyme Klasse dieses Interface. Die Methoden sind damit schon bekannt und anonyme Klassen können die Methoden, die sie implementiert haben, aufrufen. Handelt es sich dagegen um den Namen einer Klasse, wird die anonyme Klasse daraus abgeleitet. In diesem Bsp. implementiert die anonyme Klasse das Interface java.awt.event.ActionListener, indem der selbe Klassenname benutzt wird. Damit muss die anonyme Klasse die Methode actionPerformed(ActionEvent e) implementieren.