Welchen Sinn haben abstrakte Methoden?

Jack159

Bekanntes Mitglied
Ich lerne gerade Java und bin momentan beim Thema "Vererbung, Polymorphie, Interfaces...".
Meiner Meinung nach ein etwas komplexeres Thema.

Im Buch ist die rede von "Abstrakten Methoden", welche etwa so aussehen:

Java:
public abstract double preis();

Abstrakte Methoden zeichnen sich ja dadurch aus, dass diese keinen Body haben.
Bei normalen Methoden, welche einen Body haben, würden im Body ja dann irgednwelche Anweisungen stehen, die diese Methode ausführt.
z.b.
Java:
public double preis() {
x = y+1
}

Welchen Sinn hat aber jetzt eine abstrakte Methode, welche garkeine Anweisungen ausführt?
Wozu schreibt man diese überhaupt auf? Da kann man die doch gleich weglassen, oder?
 
H

Herr K.

Gast
Hallo Jack,

der Sinn von abstrakten Methoden liegt in ihrer Abstraktion. Nehmen wir an, dass Du eine Klasse MediaPlayer schreibst, die einfach eine Musikdatei abspielen kann.
Wie wir alle wissen gibt es jetzt sehr unterschiedliche Musikdateien, manche nutzen MP3, andere mögen OGG und wieder andere vielleicht WMA.

Das Abspielen von Musik ist jetzt zu einem großen Teil gleich, man lädt die Datei, wertet die Tags aus, dekodiert den Datenstrom in etwas, das direkt abgespielt werden soll.
Hier gehen wir mal vereinfachend davon aus, dass nur die Kodierung (MP3, OGG oder WMV) sich unterscheidet. Dann bietet es sich an, dass Du nicht Drei Klassen Mp3Spieler, OggSpieler und WmvSpieler so schreibst, dass die sich 80%-90% des Codes teilen, sondern eine gemeinsame Basis nutzt. In dieser Basis-Klasse MediaPlayer schreibst alle Methoden zum öffnen der Datei und auslesen der Tags und siehst eine abstrakte Methode decode vor, die eben den Datenstrom dekodiert.
Die kannst Du in der Basisklasse auch schon verwenden, der Code für das Abspielen steht also schon, obwohl Du den noch gar nicht kennst.
Für jedes unterstützte Format musst Du jetzt nur noch diese eine Methode implementieren und kann die entsprechende Klasse verwenden.

Warum ist das gut? Einerseits sparst Du Dir das Copy&Paste beim Erzeugen der Klassen. Wichtiger ist aber, dass Du auch die Wartbarkeit deutlich verbesserst. Möchtest Du z.B. noch auf der Konsole ausgeben, welcher Song jetzt gespielt wird, dann kannst Du das an einer Stelle in der Basisklasse ändern und musst nicht in die drei Dateien rein. Letzteres ist der Nachteil an C&P Lösungen, Du musst in zig-Dateien und übersiehst schnell eine Stelle.
 

Jack159

Bekanntes Mitglied
Ich hab mir das eben durchgelesen und jetzt ist es glaube ich etwas klarer.
In der Superklasse kommen also abstrakte Methoden rein, welche jede Unterklasse erbt.
Sollte eine Unterklasse eine dieser abstrakten Methoden brauchen, dann erhält diese Methode erst in der Unterklasse einen Body.
 
H

Herr K.

Gast
In der Superklasse kommen also abstrakte Methoden rein, welche jede Unterklasse erbt.

Das ist soweit korrekt, vor allem aber kann die Superklasse bereits diese Methoden aufrufen (und jede Unterklasse liefert hier eine eigene Implementierung).

Sollte eine Unterklasse eine dieser abstrakten Methoden brauchen, dann erhält diese Methode erst in der Unterklasse einen Body.

Das ist so nicht ganz richtig. Sobald eine Klasse mindestens eine abstrakte Methode umfasst, ist auch die Klasse als abstrakt zu markieren. Ein Exemplar einer abstrakten Klasse kannst Du aber nicht erzeugen, schließlich gibt es mindestens eine Mehtode (die vielleicht schon in der Klasse selbst aufgerufen wird), die überhaupt keine Implementierung besitzt.
Also ja, den "Body"/ die Implementierung wird in einer Ableitung eingefügt, aber das gilt für jede Ableitung von der Du ein Exemplar erzeugen willst (per new).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
5 Welchen Sinn hat ein Runnable Java Basics - Anfänger-Themen 6
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
K Für was braucht man die left und right shift operatoren? Was bringen die, also welchen Zweck haben die? Java Basics - Anfänger-Themen 15
F Welchen Layout Manager wählen? Java Basics - Anfänger-Themen 13
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
S Welchen Bereich sollte ich favorisieren? Java Basics - Anfänger-Themen 3
E java lernen mit welchen mitteln Java Basics - Anfänger-Themen 37
J Welchen kostenlosen GUI-Builder nehmen? Java Basics - Anfänger-Themen 5
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
I ComponentListener zu welchen Zeitpunkt aktiv Java Basics - Anfänger-Themen 5
J Welchen Layoutmanager nehmen? Java Basics - Anfänger-Themen 4
L welchen fehler übersehe ich? ...kompilieren funkt. nicht Java Basics - Anfänger-Themen 23
G Welchen Layoutmanager verwenden? Java Basics - Anfänger-Themen 7
R Welchen Datentyp verwenden? Java Basics - Anfänger-Themen 12
D Programmierstil - Bei Vererbung welchen Typ benutzen? Java Basics - Anfänger-Themen 8
N Eclipse und ascii codes, welchen wählen? Java Basics - Anfänger-Themen 3
G Welchen package-Namen wählen, wenn man keine Domain hat? Java Basics - Anfänger-Themen 11
D Welchen Namen darf ein Konstruktor haben? Java Basics - Anfänger-Themen 6
S externe lib´s in welchen ordner packen? Java Basics - Anfänger-Themen 6
S welchen layoutmanager Java Basics - Anfänger-Themen 9
D Interfaces von Interfaces macht das noch Sinn? Java Basics - Anfänger-Themen 21
F Hat es noch einen Sinn, alte Versionen zu lernen Java Basics - Anfänger-Themen 45
berserkerdq2 Wo ist der SInn, dass man den Stream, den ich zum Schreiben nutze, outputstream nenne? Java Basics - Anfänger-Themen 5
H Sinn von Interfaces Java Basics - Anfänger-Themen 21
W Sinn eines Singleton ? Java Basics - Anfänger-Themen 14
R getUserProperties() macht für mich keinen Sinn Java Basics - Anfänger-Themen 8
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
B Sinn von Lambdas? Java Basics - Anfänger-Themen 16
P OOP Sinn von abstrakten Klassen Java Basics - Anfänger-Themen 2
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
B Der Sinn von Arrays Java Basics - Anfänger-Themen 2
Q Container sinn? Java Basics - Anfänger-Themen 3
S string index out of range - es ergibt keinen Sinn Java Basics - Anfänger-Themen 6
C Sinn eines Interfaces? Java Basics - Anfänger-Themen 4
J Sinn/Nutzen von Scanner Java Basics - Anfänger-Themen 23
B Sinn von Reflections Java Basics - Anfänger-Themen 10
H Vererbung Prinzip der Ersetzbarkeit-Sinn? Java Basics - Anfänger-Themen 9
F Sinn der SuppressWarnings("unused")-Annotation Java Basics - Anfänger-Themen 5
R Sinn des programmes Java Basics - Anfänger-Themen 10
W Sinn von Konstruktorsyntax und finalize Java Basics - Anfänger-Themen 14
J Worin besteht der Sinn und Anwendungsbereich von Dreidimensionalen Arrays? Java Basics - Anfänger-Themen 11
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
T Sinn von finally? Java Basics - Anfänger-Themen 3
M Variablen Zinseszinsberechnung - Variable ergibt keinen Sinn Java Basics - Anfänger-Themen 15
A Klassen Sinn des Konstruktors Java Basics - Anfänger-Themen 12
P Sinn des Security Managers Java Basics - Anfänger-Themen 2
D Sinn von Jar Dateien Java Basics - Anfänger-Themen 5
D Sinn von Interfaces - Wozu? Java Basics - Anfänger-Themen 9
K Sinn eigener Exceptions Java Basics - Anfänger-Themen 11
Luk10 Sinn von Instanzierung ohne Referenz Java Basics - Anfänger-Themen 7
hdi Sinn von RuntimeExceptions? Java Basics - Anfänger-Themen 90
Developer_X NullPointer Exception ohne Sinn Java Basics - Anfänger-Themen 19
L Sinn hinter Generic? Java Basics - Anfänger-Themen 5
M Der Java Schlüsselwort null; ?Welche Anweisung und Sinn? Java Basics - Anfänger-Themen 12
A Macht es Sinn Arraylisten mit Gettern zu übergeben? Java Basics - Anfänger-Themen 19
M Variable überwachen und Sinn eines Threads Java Basics - Anfänger-Themen 7
G Sinn vo OOP Java Basics - Anfänger-Themen 5
P Unterschied zwischen Interface und Vererbung und Sinn? Java Basics - Anfänger-Themen 5
G sinn von JList Java Basics - Anfänger-Themen 6
K Sinn von Interfaces Java Basics - Anfänger-Themen 10
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
TheSepp Nur Arrays ausgeben, die Werte zugewiesen haben. Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
J Kreis soll die gleiche Fläche wie das Rechteck haben wie mache ich das? Java Basics - Anfänger-Themen 3
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
C HashMap - alle keys haben values der letzten put-Anweisung Java Basics - Anfänger-Themen 3
M Erste Schritte Neuen Frame nur einmal offen haben Java Basics - Anfänger-Themen 6
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
N Objektvariablen haben den gleichen Wert - warum? Java Basics - Anfänger-Themen 5
T Wenn Schaltjahr ist, soll Februar, einen Tag mehr haben, GUI mit combobox Java Basics - Anfänger-Themen 4
B Warum haben Java Programme ein anderes Design? Java Basics - Anfänger-Themen 5
J Haben Chars wirklich keine KeyCodes? Java Basics - Anfänger-Themen 12
J Wie behalten Variablen den Wert, den sie in einer anderen Methode erhalten haben? Java Basics - Anfänger-Themen 14
M Class will alle Variablen als static haben Java Basics - Anfänger-Themen 11
T Doublezahlen haben ein E Java Basics - Anfänger-Themen 12
B Was für Aufgaben haben die einzelne Entwurfsmuster? Java Basics - Anfänger-Themen 9
E BlockChallenge: Klötze haben keinen anschlag Java Basics - Anfänger-Themen 10
E Object als Parameter das Unbekannt ist, aber ein bestimmtes Interface haben muss Java Basics - Anfänger-Themen 3
M möchte in konstrukturaufruf eine bedingte anweisung haben. Java Basics - Anfänger-Themen 6
T Variablen haben null Wert in try-Anweisung Java Basics - Anfänger-Themen 4
L Array von Buttons, jeder soll MouseListener haben Java Basics - Anfänger-Themen 5
M Warum können innere Klassen keine static-members haben? Java Basics - Anfänger-Themen 2
P Program funktioniert nur bei Rechner die jdk haben Java Basics - Anfänger-Themen 4
S Welche Bedeutung haben diese Wörter? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben