Abstrakte Klasse: Unterschied zwischen den Versionen

Aus SibiWiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 22: Zeile 22:
Damit man weiß, wie viel Pappe man für das Anfertigen von allen geometrischen Objekten braucht, enthält die Klasse eine Methode <code>gesamtFlaeche()</code>
Damit man weiß, wie viel Pappe man für das Anfertigen von allen geometrischen Objekten braucht, enthält die Klasse eine Methode <code>gesamtFlaeche()</code>


<code>
<code>
   public class MobileTeile{
   public class MobileTeile{
     // in die folgende Liste koennen geometrische Figuren eingefügt werden,
     // in die folgende Liste koennen geometrische Figuren eingefügt werden,
Zeile 53: Zeile 53:
     }
     }
   }
   }
</code>
</code>
 
=Zusammenhänge mit anderen Konzepten der objektorientierten Programmierung=
* Abstrakte Klassen funktionieren nur mit [[Vererbung]].<br/>Da man von einer abstrakten Klasse kein Objekt erzeugen kann, muss man eine Subklasse bilden, die von der abstrakten Klasse erbt. Die Subklasse implementiert dann die abstrakte Methode.
 
* Abstrakte Klassen sind ausdrücklich dafür gemacht, [[Polymorphie]] zu realisieren:<br/>Die Sub-Klassen der abstrakten Klasse implementieren die abstrakten Methoden, d.h. diese Methoden heißen in allen Subklassen und in der abstrakten Superklasse gleich.<br/>Deswegen eignet sich die abstrakte Methode perfekt für einen polymorphen Aufruf.
 
* Abstrakte Klassen unterscheiden sich von [[Interface]]:
** Wenn die Basis-"Klasse" ausschließlich Methoden festlegt, ohne sie zu implementieren, dann nimmt man ein Interface.
** Wenn die Basis-Klasse Attribute und/oder Methoden selber implementiert, dann nimmt man eine abstrakte Klasse.


=Vergleiche auch...=
=Vergleiche auch...=
* [[Polymorphie]]
* [[Polymorphie]]
* [[Vererbung]]
* [[Vererbung]]
* [[Interface]]

Aktuelle Version vom 23. Januar 2022, 17:09 Uhr


Zu diesem Thema gibt es leider noch keinen eigenen Inhalt :(
Nach Recherche verweise ich auf folgende - meiner Ansicht nach - gut geeignete Seite, die danach noch ergänzt wird.

Abstrakte Klasse auf inf-schule

Abstrakte Klassen auf inf-schule.de

Ergänzung

Auf inf-schule (s.o.) wird nicht so richtig deutlich, wie man Abstrakte Klassen eigentlich einsetzt.

Daher folgende Ergänzung:

Geplant ist eine Klasse MobileTeile, in der in einer Liste geometrische Objekte verwaltet werden, die für den Bau eines Mobile gebraucht werden.

Man kann Kreise und Rechtecke hinzufügen.

Damit man weiß, wie viel Pappe man für das Anfertigen von allen geometrischen Objekten braucht, enthält die Klasse eine Methode gesamtFlaeche()


 public class MobileTeile{
   // in die folgende Liste koennen geometrische Figuren eingefügt werden,
   // d.h. Kreise oder Rechtecke.
   private List<GeometrischeFigur> figurenListe;

   public MobileTeile(){
     figurenListe = new List<>();
   }

   public void rechteckHinzufuegen(Rechteck pRechteck){
     // man kann der figurenListe problemlos ein Rechteck hinzufuegen, denn ein Rechteck ist eine GeometrischeFigur!     
     figurenListe.append(pRechteck);
   }

   public void rechteckHinzufuegen(Kreis pKreis){
     // man kann der figurenListe problemlos einen Kreis hinzufuegen, denn ein Rechteck ist eine GeometrischeFigur!
     figurenListe.append(pKreis);
   }
 
   public double gesamtFlaeche(){
     double ergebnis = 0;
     for(figurenListe.toFirst(); figurenListe.hasAccess(); figurenListe.next()){
        // gf kann ein Rechteck oder ein Kreis sein!
        GeometrischeFigur gf = figurenListe.getContent();

        //hier wird - polymorph - die richtige Methode (fuer den Kreis bzw. das Rechteck) aufgerufen!
        ergebnis += gf.berechneFlaeche();
     }
   }
 }

Zusammenhänge mit anderen Konzepten der objektorientierten Programmierung

  • Abstrakte Klassen funktionieren nur mit Vererbung.
    Da man von einer abstrakten Klasse kein Objekt erzeugen kann, muss man eine Subklasse bilden, die von der abstrakten Klasse erbt. Die Subklasse implementiert dann die abstrakte Methode.
  • Abstrakte Klassen sind ausdrücklich dafür gemacht, Polymorphie zu realisieren:
    Die Sub-Klassen der abstrakten Klasse implementieren die abstrakten Methoden, d.h. diese Methoden heißen in allen Subklassen und in der abstrakten Superklasse gleich.
    Deswegen eignet sich die abstrakte Methode perfekt für einen polymorphen Aufruf.
  • Abstrakte Klassen unterscheiden sich von Interface:
    • Wenn die Basis-"Klasse" ausschließlich Methoden festlegt, ohne sie zu implementieren, dann nimmt man ein Interface.
    • Wenn die Basis-Klasse Attribute und/oder Methoden selber implementiert, dann nimmt man eine abstrakte Klasse.

Vergleiche auch...