Abstrakte Klasse versus Interface

Aufrufe: 1842     Aktiv: 03.01.2020 um 15:29

2

Hi allerseits,

man kann ja in Java mittlerweile auch in Interfaces Methoden implementieren und nicht nur deklarieren. Gibt es denn nun überhaupt noch einen Grund abstrakte Klassen zu erstellen? Interfaces haben in meinen Augen mehr Vorteile.

Danke.

LG

Diese Frage melden
gefragt

Student, Punkte: 56

 
Kommentar schreiben
1 Antwort
3

Hallo danielainformatik,

grundsätzlich unterscheiden sich seit JAVA 8 abstract classes und interfaces kaum.

Jedoch musst du bei deiner Annahme beachten, dass fields der abstract classes nicht static und final sind, sowie konkrete public, protected und private Methoden erstellbar sind. Dagegen sind bei interfaces alle fields "automatisch" public, static und final, sowie alle Methoden, die du deklarierst oder definierst (als defaults) ebenfalls public.

Bei abstrakte Klassen geht es darum die Charakteristik, also was der Objekten Typ ist, zu definieren und bei Interaces dagegen was das Objekt können soll.

Hoffe ich konnte damit deine Frage beantworten.

Mit freundlichen Grüßen Bill

Diese Antwort melden
geantwortet

Student, Punkte: 50

 

Ja, das hilft schon etwas weiter. Könntest du zufällig auch ein Beispiel nennen, wo du abstract class und wo die Interface benutzen würdest.

Also mir würde spontan jetzt z.b. einfallen, ein ganz simples Beispiel.
Ich bin Student. Dafür würde ich eine abstract class Person erstellen , die z.B. Alter, irgendeine ID (z.b. Matrikelnr z.b), bei anderen Personengruppen, z.b. Mitarbeitern der Uni wären das die Mitarbeiternr, , dann Anschrift etc.
Als Interface könnte ich mir vorstellen, dass ein Student Fächer bestimmte Dinge wählen muss, wie z.B. Fächer, Prüfungen etc. für den Mitarbeiter wären das Urlaube etc.

Geht das so in die richtige Richtung?

danke

  ─   danielainformatik 03.01.2020 um 13:50

Hallo

Ja das geht schon in die Richtung!

Das Beispiel mit der Person und den gleichen Informationen (Name, Anschrift, etc) für verschiedene Gruppe (Student, Prof, etc..) ist völlig richtig.
Und als Interface würde ich da z.B. IDrinkBeer mit der Methode drinkBeer() erstellen welche dann die anderen Klassen implementieren können und jede Gruppe z.B. Student trinkt ja auf eine andere Art und Weise Bier als andere :) Oder bei Tieren ein Interface IMakeSound wo Tiere diese implementieren können (wenn sie einen Sound machen) und jedes Tier macht diesen Sound ja individuell, die Methode wird also von jeder Klasse individuell geschrieben.

(Von Oracle gibt es dazu auch Erklärungen: https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)

Mit freundlichen Grüßen
Bill

  ─   bllkpp 03.01.2020 um 15:29

Kommentar schreiben