Ja — durch die Verwendung einer abstrakten Klasse kann ein Programmierer erreichen, dass alle Subklassen dieser Klasse sich in wichtigen Teilen gleichen.
Nicht alles was in einer abstrakten Klasse definiert ist, muss abstrakt sein. Die Variable empfaenger
ist in der Klasse Karte
definiert und wird in der üblichen Weise geerbt.
Aber sobald eine Klasse auch nur eine abstrakte Methode besitzt, dann muss die Klasse selbst als abstrakt deklariert werden. Hier ist ein Programm, um die zwei Klassen zu testen.
abstract class Karte { String empfaenger; public abstract void gruss(); } class Feiertag extends Karte { public Feiertag(String e) { empfaenger = e; } public void gruss() { System.out.println( "Dear " + empfaenger + ","); System.out.println("frohe Feiertage!"); } } public class KarteTester { public static void main(String[] args) { Feiertag feiern = new Feiertag("Nikolaus"); feiern.gruss(); } }
Das ist ein vollständiges, ausführbares Programm. Der Wunsch es zu kopieren und auszuführen muss unwiderstehlich sein.
Könnten wir dieses Programm schreiben ohne eine abstrakte Klasse zu verwenden?