2.1 Konsequenzen bei Verwendung abstrakter Methoden
Hier in Kurzform der gesamte Zusammenhang:
- Eine Methode wird als abstrakt gekennzeichnet, wenn man den Programmcode nicht definieren kann oder will. Praktisch wird nur die Schnittstelle deklariert.
- Enthält eine Klasse eine abstrakte Methode, muss sie als abstrakt gekennzeichnet werden.
- Aus abstrakten Klassen können keine Objekte instanziiert werden.
- Um wieder Objekte generieren zu können müsse in einer Unterklasse alle vorgegebenen abstrakten Methoden definiert (ausprogrammiert) werden.
2.2 Unterschiede der Zugriffsspezifizierer
- private (-): Nur Methoden in der selben Klasse können darauf zugreifen.
- protected (#): Nur Methoden in der selben Klasse und in Unterklassen können darauf zugreifen. Erspart Zugriffsmethoden bei Attributen.
- public (+): Öffentlich zugänglich, auch aus "fremden" Klassen kann zugegriffen werden.
2.3 Unterschied zwischen überladen und überschreiben
- Wird in einer Klasse eine Methode ein weiteres mal mit einer anderen Parameterliste definiert wird das überladen genannt.
- Wird in einer Unterklasse eine Methode der Oberklasse redefiniert wird das überschreiben genannt.
Die Signatur einer Methode ist ihr Name gefolgt von der Parameterdatentypenliste Bsp.: plus(GZ,GZ); plus(FKZ,FKZ); plus(GZ,GZ,GZ). Wenn unter dem Metodennamen mehrere Implementierungen vorhanden sind spricht man von Polymorphie. Beim überladen kann der Compiler schon zur Compile-Zeit die Methode feststellen: Statische Polymorphie. Beim Überschreiben kann oft erst zur Laufzeit anhand der Klasse des Objekts entschieden werden welche Methode aufgerufen werden soll: Dynamische Polymorphie.
2.4
import java.util.*; public class Regalschrank{ private int anzahlFachboeden; // automatisch mit 0 initalisiert private int anzahlBauteile; private boolean fertig; // autmatisch mit false initialisiert private List<Bauteil> teileListe = new ArrayList<Bauteil>(); public Regalschrank(){} public Regalschrank(int anzahlFachboeden, int anzahlBauteile){ this.anzahlFachboeden = anzahlFachboeden; this.anzahlBauteile = anzahlBauteile; } public boolean gesamtkontrolle(){ boolean ok = true; for (Bauteil item : teileListe){ if(!item.kontrolle()) ok=false; } return ok; } public boolean addBauteil(Bauteil neuesBauteil){ boolean ok = false; if(teileListe.size() < anzahlBauteile){ teileListe.add(neuesBauteil); ok = true; } return ok; } }