verdeckte abstrakte Methode sinnvoll?

ernst

Top Contributor
Hallo Gemeinde,
Haben verdeckte, abstrakte Methoden einen Sinn?

Folgender Fall (Beispiel)

1)
Java:
abstract class A{
    public abstract void f ();  
}

abstract class AA extends A{
}

class AAA extends AA{
  public void f (){
    System.out.println("Hallo");  
  }  
}

Klasse A vererbt an Klasse AA die abstrakte Methode f, also muß AA wieder abstact sein.
Das ist mir alles noch klar.
Aber jetzt Folgendes:

2)
Java:
abstract class A{
    public abstract void f ();  
}

abstract class AA extends A{
    // Hat das einen Sinn???
    public abstract void f ();  
}

class AAA extends AA{
  public void f (){
    System.out.println("Hallo");  
  }  
}

Was verändert sich, wenn man in Klasse AA die verdeckte abstrakte Methode f einfügt?
Hat dies einen Sinn?
Wenn ja, welchen ?
Das ist mir nicht klar.

mfg
ernst
 

knilch

Bekanntes Mitglied
Hi,
Das macht schon Sinn. In der Klasse AA ist die Methode f() abstrakt. Das heisst, alle Klassen, die von AA erben, müssen entweder die abstrakte Methode f() implementieren. Wenn nicht, dann wäre(n) die erbenden Klassen von AA auch wieder abstrakt.
Damit kannst du erreichen, dass du in Klasse AA abstrakte Methoden definierst, welche alle erbenden Klassen implementieren müssen. Dies ist Sinnvoll wenn du garantieren möchtest, dass das Verhalten von allen erbenden Klassen gleich funktioniert, d.h. Egal ob es nun ein z.B. AAA oder ein AAB ist, die Methode, welche in AA definiert wurde, kann bei Instanzen von AAA oder AAB auf gleiche Art und Weise ausgeführt werden und gibt in beiden Fällen etwas zurück.
z.B. Eine abstrakte Klasse Car.
Diese hat eine abstrakte Methode public abstract String getCarType();
Nun implementierst du 2 Klassen, z.B. VW und Audi. Beide Klassen erben von Car und implementieren die Methode getCarType(). Beim Aufruf von getCarType wird dann jeweils VW oder Audio zurückgegeben.
Java:
public abstract class Car {
   public abstract String getCarType();
}

public class Audi extends Car{
public String getCarType() {
   return "Audi";
}

}
public class VW extends Car{
public String getCarType() {
   return "VW";
}
}

Du kannst es so anschauen, wenn eine Klasse AAA von AA erbt, dann soll die Klasse AAA gefälligst den Vorgaben folgen, die in AA defniert wurden, also so eine Art von Vertrags- Verhältnis zwischen Erbenden und Vererbenden Klassen.

Gruss knilch
 
Zuletzt bearbeitet:

ernst

Top Contributor
Danke für deine Antwort.
Aber warum kann ich das nicht mit meinem Fall 1 (siehe Ursprungsposting von mir) erreichen:
(Hier nochmals aufgeführt):

Java:
abstract class A{
    public abstract void f ();  
}

abstract class AA extends A{
}

class AAA extends AA{
  public void f (){
    System.out.println("Hallo");  
  }  
}

mfg
ernst
 

stg

Top Contributor
Einen wirklichen Sinn haben sie nicht.

Vorteile können sein:
- Es ist sofort ersichtlich, warum die Klasse AA ebenfalls abstract ist.
- Du kannst unterschiedliche JavaDoc-Kommentare verfassen (oder sonstige über Annotations gesteuerten Krams)

Es leidet jedoch die Wartbarkeit, wenn du Code (unnötigerweise) duplizierst (DRY)
 
Zuletzt bearbeitet:

knilch

Bekanntes Mitglied
Hi,
Die 1. Variante von dir geht:
AA erweitert A, aber f() wird nicht implementiert. Somit wird AA abstrakt. Erst in AAA wird f() implementiert. Das Funktioniert so.
Auch die 2. Vairante geht, es macht aber keinen Sinn eine abstrakte Methode die in A schon mal definiert wurde, in AA nochmals mit dem selben Methodenrumpf zu definieren. (sorry, hab erst jetzt bemerkt, dass du in der 2. Variante in AA die Methode f() nochmals definiert hast... )
 

ernst

Top Contributor
>
>- Du kannst unterschiedliche JavaDoc-Kommentare verfassen (oder sonstige über Annotations gesteuerten Krams)
>
Welchen Sinn hat das ?
Es ist doch die gleiche Methode.


>
>Es leidet jedoch die Wartbarkeit, wenn du Code (unnötigerweise) duplizierst (DRY)
>
Du meinst, wenn man die Methode
public abstract void f ();
ändern will z.B. zu
public abstract void f (int i);
dann muß man sie an 2 Stellen ändern.
Wenn man eine vergißt, hat man ein anderes Programm.
Meinst du das damit?

mfg
ernst
 

JavaMeister

Gesperrter Benutzer
Ja, es ist die gleiche Methode aber ggf. Hast du keine Möglichkeit diese zu ändern, weil es aus einer Bibliothek kommt.

--

Ja, du musst es an zwei Stellen ändern , falls man das kann.

Insgesamt kann man das theoretisch so nicht bewerten. Und ich glaube sowas macht auch keiner.
 

arilou

Bekanntes Mitglied
Oder kurz und bündig:
Nein, im Allgemeinen hat es keinen Sinn, in Klasse AA die Methode f nochmal zu erwähnen.

Ansonsten schließe ich mich voll stg's Antwort an.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Memory-Spiel alle verdeckte karten aufdecken. Java Basics - Anfänger-Themen 26
Z Verdeckte Methode aufrufen Java Basics - Anfänger-Themen 7
J Methodenaufrufe abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 17
M Abstrakte Klassen - Notation Java Basics - Anfänger-Themen 9
S Vererbung Abstrakte Methoden: Wozu das Ganze?! Java Basics - Anfänger-Themen 7
S abstrakte methoden in subclass? Java Basics - Anfänger-Themen 7
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
G Abstrakte Klassen Java Basics - Anfänger-Themen 11
G Java Abstrakte Methoden Java Basics - Anfänger-Themen 2
T Abstrakte Klasse und Interfaces Java Basics - Anfänger-Themen 12
D Abstrakte Klasse, Konstruktorkette, Attribute setzen Java Basics - Anfänger-Themen 12
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
S Abstrakte Methode nutzen Java Basics - Anfänger-Themen 9
J abstrakte Methode in Klasse mit Rückgabetyp der abgeleiteten Klasse Java Basics - Anfänger-Themen 5
J Objekte und Abstrakte Klassen Java Basics - Anfänger-Themen 2
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
T Übungsaufgabe abstrakte Klasse Java Basics - Anfänger-Themen 21
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
S Gehaltsberechnung (Vererbung, abstrakte Methoden) Java Basics - Anfänger-Themen 6
S Datentypen Abstrakte Datentypen Java Basics - Anfänger-Themen 0
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
K Abstrakte Klasse: vererbte Klasse; instance of? Java Basics - Anfänger-Themen 26
A Abstrakte Datentypen - Methode delete Java Basics - Anfänger-Themen 6
N Vererbung Abstrakte Klasse stateful Java Basics - Anfänger-Themen 3
D Abstrakte Klassen Verständniss Frage Java Basics - Anfänger-Themen 4
D Methoden Abstrakte Methoden Java Basics - Anfänger-Themen 3
W Abstrakte Klasse mit Variable? Java Basics - Anfänger-Themen 2
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
B Abstrakte Klassen Java Basics - Anfänger-Themen 7
C Abstrakte und virtuelle Methoden in Java Java Basics - Anfänger-Themen 4
A Vererbung Abstrakte Klasse mit Methode die Objekte der Subklassen benutzt? Java Basics - Anfänger-Themen 7
W Abstrakte und konkrete Klasse Java Basics - Anfänger-Themen 4
S Abstrakte Klassen Java Basics - Anfänger-Themen 2
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
F Abstrakte Klasse doch zum "Teil" instanzieren? Java Basics - Anfänger-Themen 4
V Interface Interfaces und abstrakte Klassen Java Basics - Anfänger-Themen 3
H Abstrakte Basisklasse Verständnisproblem! Java Basics - Anfänger-Themen 8
G Abstrakte Klassen - theoretische Frage Java Basics - Anfänger-Themen 2
OnDemand Abstrakte Klassen Java Basics - Anfänger-Themen 4
T OOP Abstrakte Klassen und ihre Kinder: wie läuft das? Java Basics - Anfänger-Themen 3
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
M Abstrakte Klassen Java Basics - Anfänger-Themen 2
J Interfaces Abstrakte Klassen Java Basics - Anfänger-Themen 15
M Interface und Abstrakte Klassen Java Basics - Anfänger-Themen 12
N Datentypen abstrakte Klasse wird instanziert Java Basics - Anfänger-Themen 3
D Methoden abstrakte Methoden und Rückgabewerte Java Basics - Anfänger-Themen 2
B Abstrakte Methode vs. Interface Java Basics - Anfänger-Themen 2
propra Interface - abstrakte Klasse Java Basics - Anfänger-Themen 18
N Abstrakte Klasse Java Basics - Anfänger-Themen 28
R Namenskonvention abstrakte Klassen Java Basics - Anfänger-Themen 6
C OOP Objektstruktur: abstrakte Klassen Java Basics - Anfänger-Themen 3
L Über abstrakte Klasse auf eine Klasse zugreifen? Java Basics - Anfänger-Themen 6
V Vererbung Abstrakte Methode Java Basics - Anfänger-Themen 3
T OOP abstrakte klassen - methoden Java Basics - Anfänger-Themen 8
M Abstrakte Klassen Java Basics - Anfänger-Themen 21
J Welchen Sinn haben abstrakte Methoden? Java Basics - Anfänger-Themen 4
D Wann genau abstrakte Klasse und wann ein Interface verwenden? Java Basics - Anfänger-Themen 4
D Abstrakte Klassen und Interfaces als Paramter in Funktionen Java Basics - Anfänger-Themen 3
StupidAttack Abstrakte Methoden in nicht-abstrakter Methode in abstrakter Klasse Java Basics - Anfänger-Themen 6
T Abstrakte Klasse Java Basics - Anfänger-Themen 3
S Abstrakte Klasse Java Basics - Anfänger-Themen 5
T Interfaces: Braucht man abstrakte Klassen eigentlich noch? Java Basics - Anfänger-Themen 3
T OO, Konstruktor, abstrakte Methoden Java Basics - Anfänger-Themen 13
K Abstrakte Klasse vs. Interface Java Basics - Anfänger-Themen 21
T Abstrakte Klassen Java Basics - Anfänger-Themen 6
C abstrakte Klassen mögen mich nicht... Java Basics - Anfänger-Themen 2
I Abstrakte Klassen Java Basics - Anfänger-Themen 8
K Abstrakte Klasse bilden? Java Basics - Anfänger-Themen 11
S Abstrakte Klasse, festlegen, dass Methode verändert werden muss. Java Basics - Anfänger-Themen 4
D Zusammenfassung von Klassen (Vererbung? Abstrakte Klass? ...?) Java Basics - Anfänger-Themen 8
H Warum Java? | Abstrakte Klasse = Modul? Java Basics - Anfänger-Themen 20
G Abstrakte Klassen und Methoden Java Basics - Anfänger-Themen 3
C Schnittstellen und Abstrakte Klassen Java Basics - Anfänger-Themen 3
I Abstrakte Klassen Java Basics - Anfänger-Themen 22
J abstrakte klasse und methode super Java Basics - Anfänger-Themen 2
H Eine Abstrakte Klasse muss. Java Basics - Anfänger-Themen 7
G Abstrakte Klasse "Point" Java Basics - Anfänger-Themen 2
G Abstrakte Klassen ? Java Basics - Anfänger-Themen 9
G Abstrakte Methode in gleicher Klasse aufrufen Java Basics - Anfänger-Themen 5
M abstrakte Klasse Java Basics - Anfänger-Themen 3
nadoria abstrakte Klassen Java Basics - Anfänger-Themen 6
F Abstrakte Klasse: Konstruktor vs init() Java Basics - Anfänger-Themen 13
M Unterscheid Abstrakte Klassen/Interface Klassen? Java Basics - Anfänger-Themen 7
G Abstrakte Klasse (was passiert hier) Java Basics - Anfänger-Themen 3
T abstrakte Klassen? Java Basics - Anfänger-Themen 2
G Interface oder Abstrakte Klasse? Java Basics - Anfänger-Themen 3
G konkretes beispiel: interface hier besser als abstrakte kl. Java Basics - Anfänger-Themen 4
Acha Unterschied Interface - abstrakte Klasse Java Basics - Anfänger-Themen 4
M abstrakte klassen und interfaces Java Basics - Anfänger-Themen 2
B OOP: abstrakte klasse implementiert interface Java Basics - Anfänger-Themen 3
L abstrakte Methode nicht implementiert! Java Basics - Anfänger-Themen 5
M abstrakte klassen / Schnittstellen Java Basics - Anfänger-Themen 4
H abstrakte Klassen, Interfaces Java Basics - Anfänger-Themen 13
D Abstrakte Klasse Graphics Java Basics - Anfänger-Themen 3
R Interfaces durch abstrakte Klassen ersetzbar? Java Basics - Anfänger-Themen 8
A Abstrakte Klasse Java Basics - Anfänger-Themen 3
G abstrakte klasse Java Basics - Anfänger-Themen 6
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben