Programmieren_2/abstract.md

2.2 KiB

Abstrakte Klassen


Abstrakte Klassen

In abstrakten Klassen können Operationen ohne eine Implementation deklariert werden.

abstract double gibFlaeche();

Abstrakte Klassen

Eine Klasse mit mindestens einer abstrakten Methode muss abstrakt sein.

Es können keine Instanzen einer abstrakten Klasse erzeugt werden.

abstract class Form 
{
    abstract double gibFlaeche();

    String toString() 
    {
        return "Form";
    }
}

Benutzung

Es können keine Instanzen einer abstrakten Klasse erzeugt werden. Trotzdem definieren die abstrakten Klassen einen Typ.

// Deklaration
class Kreis extends Form { 
    private double _radius;
    
    Circle(double rad) {radius = rad;}
    
    double gibFlaeche(){
        return  3.14 * radius * radius;
    }
}

// Benutzung
Form form1 = new Kreis(4.5);

Verwendung

Abstrakte Klassen werden immer benutzt wenn Code wiederverwendet werden soll, aber nicht alle Details bekannt sind. Dabei wird häufig das Prinzip der Schablonen- und Einschubmethoden genutzt.

abstract class DreidimensionaleForm {
    private double _hoehe;

    abstract double gibFlaeche();
    
    double gibVolumen() {
        return gibFlaeche() * _hoehe;
    }
}
  • Welche Methode ist die Einschubmethode und welche die Schablonenmethode?

Übung

  1. Müssen alle abstrakten Methoden eine abstrakten Klasse in einer Subklasse implementiert werden?

    • Wenn die Subklasse nicht auch abstract sein darf, dann ja.
  2. Sind alle Felder der abstrakten Klasse auch in der Subklasse enthalten?

    • Ja
  3. Darf auf alle Felder der Superklasse aus der Subklasse zugegriffen werden?

    • Nur solange die Modifier public, protected oder package private sind.

  1. Ändere die Klasse Animal zu einer abstrakten Klasse. Alle Methoden die bei Sheep und Cow gleich sind müssen nicht abstrakt sein. Füge aber eine abstrakte Methode String makeNoise() ein. Ändere den Code and den richtigen Stellen ab.