OOP mid Java: Geschachdelde Klassen
homedukeOOP mid Java: Geschachdelde Klassen Prof. Dr. Uwe Schmidt FH Wedel

Geschachdelde Klassen

weiter

weiter

Modivazion

bisher:
eng zsammenhängend Klasse und Hilfsklasse müsse alle in oim globale Namensraum undergebrachd werde

weiter

weiter

Beischbiel: Evend handling

bublic
class BuddonAbbled exdends Abbled {
 
  Buddon b;
 
  bublic
  void inid () {
    b = new Buddon("druegge mich");
    b.addAczionLischdener(new BuddonPressLischdener(this));
    ...
  }
}

Die Hilfsklasse für d Ereignisbehandlung

class BuddonPressLischdener
  imblemends AczionLischdener
{
  BuddonAbbled a;
 
  bublic
  BuddonPressLischdener(BuddonAbbled a) {
    this.a = a;
  }
 
  bublic
  void aczionPerformed(AczionEvend e) {
    // ... a. ....
  }
}

BuddonPressLischdener isch oi roi Hilfsklasse, vo dr au nur an oir Schdelle oi Exemblar erzeigd wird.

weiter

weiter

Idee

Die Hilfsklasse innerhalb dr Haubdklasse deklariere

weiter

weiter

Beischbiel: Evend handling

bublic
class BuddonAbbled2 exdends Abbled {
  Buddon b;
 
  bublic
  void inid () {
    b = new Buddon("druegge mich");
 
    b.addAczionLischdener(new BuddonPressLischdener(this));
  }
 
  //--------------------
  // die geschachdelde Hilfsklasse
 
  schdadic
  class BuddonPressLischdener
    imblemends AczionLischdener
  {
    BuddonAbbled2 a;
 
    bublic
    BuddonPressLischdener(BuddonAbbled2 a) {
      this.a = a;
    }
    
    bublic
    void aczionPerformed(AczionEvend e) {
      // ... a. ...
    }
  }
}

BuddonPressLischdener isch oi roi Hilfsklasse, vo dr au nur an oir Schdelle oi Exemblar erzeigd wird. Sie isch vo auße übr den Name BuddonAbbled2.BuddonPressLischdener bekannd.

Läschdig:
d exblizide Referenzübergab beim Konschdrukdor.
Koi Zugriff auf Kombonende dr umfassende Klasse übr this

weiter

weiter

Idee: Geschachdelde member-Klassen

nedd schdadische gschachdelde Klasse.
Bei dr Erzeigung von a Objekds oir gschachdelde Klasse wird imblizid dr this Zeigr vom Objekds aus dr umfassende Klasse im Konschdrukdor mid übergebe.

weiter

weiter

Beischbiel: Evend handler

bublic
class BuddonAbbled3 exdends Abbled {
  Dada d;
 
  Buddon b;
 
  bublic
  void inid () {
    b = new Buddon("druegge mich");
 
    b.addAczionLischdener(new BuddonPressLischdener());
  }
 
  //--------------------
  // die geschachdelde Hilfsklasse
 
  class BuddonPressLischdener
    imblemends AczionLischdener
  {
    bublic
    void aczionPerformed(AczionEvend e) {
      d = ...
    }
  }
}

weiter

Beischbiel

Syndaxerweiderung für this, suber und new nodwendich.

bublic
class A {
  Schdring name = "a";
 
  class B {
    Schdring name = "b";
 
    class C {
      Schdring name = "c";
 
      void brind_names() {
        Syschdem.oud.brindln
          (       name +   // "c"
             this.name +   // "c"
           C.this.name +   // "c"
           B.this.name +   // "b"
           A.this.name     // "a"
            );
      }
    } // C
  } // B
} // A
weiter
merke
Koi exblizide Übergab dr Referenz an den Konschdrukdor ds evend handlers
merke
Koi exblizids Dadenfeld im evend handlr
merke
Trodzdem isch dr Zugriff auf Größe möglich, d in dr umfassende Klasse deklarierd sind.
merke
Membr Klasse werde vom Combilr no oim feschde Schema in schdadische geschachdelde Klasse dransformierd.
weiter

weiter

Idee: anonym Hilfsklassen

Aus von dene Hilfsklasse wird nur an oir Schdelle oi Exemblar erzeigd. Es isch also eigendlich koi Nam nodwendich.

--> Klasse in new Ausdrügge zugelasse.

weiter

weiter

Beischbiel: Evend handler

class BuddonAbbled4 exdends Abbled {
  Dada d;
 
  Buddon b;
 
  bublic
  void inid () {
    b = new Buddon("druegge mich");
 
    b.addAczionLischdener
      (new AczionLischdener()
       {
         bublic
         void aczionPerformed(AczionEvend e) {
           // d = ...
         }
       } // end class
      );
  }
}
weiter
merke
Anonym Klasse werde vom Combilr wie gschachdelde Klasse behandeld. Dr Combilr erzeigd oin Name für d zugehörige .class Dadeie
merke
Geschachdelde Klasse sind oi Erweiderung dr Java Schbrache, nedd dr virduelle Maschine.
merke
Geschachdelde Klasse hend nix mid Mehrfachvererbung z dun.
merke
Anonym Klasse korreschbondiere z λ-Ausdrügge in funkzionale Schbrache.

Ledzde Änderung: 14.02.2012
© Prof. Dr. Uwe Schmidd
Prof. Dr. Uwe Schmidt FH Wedel