Vererben großer Interface-Methoden

Luk10

Top Contributor
Grüße,

Ich habe eine feste und relative große Vererbungs-Struktur in meinem Programm. Sie besteht zum einem aus einem großen "extends"-Baum, jedoch implementieren einige Klassen auch Interfaces.

Nun meine Frage:

Ein Interface wird von 3 Klassen mitten in der "extends"-Struktur implementiert. Dieses Interface lässt eine Methode implementieren, die bei allen 3 Klassen gleich aussieht. Zusätzlich ist diese Methode sehr große bzw. lang sie enthält ca. 150 Zeilen Code.

Es erscheint nicht besonders "schön" 3 mal die exakt gleiche Methode zu implementieren, jede ziemlich lang. Besonders unter dem Aspket Wiederverwendbarkeit und Wartbarkeit ist das ja ein Alptraum ...

Kann man das irgendwie besser lösen? Ist hier ein Adapter sinnvoll, und wenn ja wie kriege ich den vernünfitg implementiert?

Danke,
-Luk10-
 

irgendjemand

Top Contributor
wenn ich jetzt bei vererbung nicht völlig daneben liege sollte ein einfacher call von [c]methodenname(parameter...)[/c] möglich sein ... selbst ohne super und auch ohne in "zwischenebenen" diese methode mit einem super-call zu überschreiben ...

ergo

in der "höchsten" klasse die das interface implementiert wird der code EINMAL geschrieben ... danach kann man von allen abgeleiteten klassen diese einfach callen ...

*vergleich dazu wäre z.b. SWING : man kann auf die meisten components einfach add(component) callen obwohl diese schon sehr weit oben implementiert ist und in den ebenen dazwischen nicht durch super-calls überschrieben wird
 

Luk10

Top Contributor
Die Interfaces makieren aber bestimmten Objekte (bestimmter Klassen).

Ich überprüfe also
Code:
if(meineKlasse instanceof meinMarkerInterface) {

Wenn ich nun die "Überklasse" aller "Unterklassen" das Interface implementieren lasse, funktioniert das nichtmehr.

-Luk10-
 
G

Gast2

Gast
Die Interfaces makieren aber bestimmten Objekte (bestimmter Klassen).

Ich überprüfe also
Code:
if(meineKlasse instanceof meinMarkerInterface) {

Wenn ich nun die "Überklasse" aller "Unterklassen" das Interface implementieren lasse, funktioniert das nichtmehr.

-Luk10-

Häh? Poste mal Code oder was ähnliches. Ich kann deinem Vererbungs und Implementierungs Konstrukt nicht mehr folgen :autsch:
 

irgendjemand

Top Contributor
öhm ... dann habe entweder ich gerade einen denkfehler *ja passiert mir auch mal ab und zu* ... oder es ist so wie ich jetzt denke *achtung : könnte auch falsch sein*

wenn du eine klasse hast die ein bestimmtes interface implementiert ... dann implementieren auch alle sub-klassen dieses interface ... darum ist auch [c]sub-klasse instanceof interface[/c] true wenn [c]super-klasse implements interface[/c] gilt ...

und zur not kannst du immer noch den würg-arround machen und mit [c]super[/c] an die super-klasse delegieren ... hat dann nur den nachteil das du das dann den gesamten vererbungs-baum durchziehen musst

[EDIT]@kappesf
geht mir genau so xD[/EDIT]
 
S

SlaterB

Gast
gemeinsame Basisklasse ist eine Variante,

ansonsten noch allgemein die Auslagerung von Code in Hilfsklassen bzw. in eine der drei 3 Klassen, wahrscheinlich statisch,
und in mindestens 2 Fällen in nur einer Zeile an die andere weiterreichen,
das eigene Objekt this als Parameter übergeben, falls benötigt,

benötigte private Attribute/ Methoden machen es kniffliger, bei immer gleichen Code aber vielleicht nicht der Fall
 

Luk10

Top Contributor
Zum Verstandniss:

> 5 Unterklassen erben von Superklasse
> 3 Unterklassen implementieren mein Interface (sollen Methode implementieren und makiert werden)
> Wenn ich die Superklasse anstatt der Unterklassen das Interface implementieren lasse sind alle Unterklassen
Code:
instanceof Interface
. Das will ich nicht.

> Ich muss entweder in allen 3 Unterklassen die Methode (aufwändig) implementieren
> oder einen anderen Weg finden

@SlaterB
Was meinst du mit "gemeinsamer" Basisklasse? Wenn ich 4 oder mehr Ebenen habe, ist das glaube ich nicht so einfach einzuführen.
Zweite Variante hört sich sinnvoll, aber nicht gerade "schön" an. Ich erzeuge eine statische Methode, und eine feste Bindung dreier Klassen aneinander, die eig. nichts von einander wissen müssen.

-Luk10-
 
S

SlaterB

Gast
> und eine feste Bindung dreier Klassen aneinander, die eig. nichts von einander wissen müssen.

es gibt keine Variante auf der Welt, in der 3 Klassen 150 Zeilen Code gemeinsam benutzen,
ohne irgendwie voneinander bzw. von einer bestimmten allgemeinen Klasse zu wissen..

edit: ok, mit gewissen Mitteln geht alles, dynamisch Objekte, die Code enthalten, hinzufügen,
etwa ein ActionListener an JButton, JMenu usw.

> Wenn ich die Superklasse anstatt der Unterklassen das Interface implementieren lasse sind alle Unterklassen instanceof Interface . Das will ich nicht.

wenn in der Oberklasse die Methode definiert wird, muss nicht auch das Interface implementiert werden,
die Methode kann einfach so da sein

vielleicht stört es, dass sie für die anderen beiden Subklassen dann auch noch verfügbar ist,
denkbar ist eine weitere Zwischenebene X, unter der bisherigen Oberklasse, die 3 Klassen erben davon
(X wäre dann die 'gemeinsame Basisklasse' der 3 Klassen, dass es noch mehr Ebenen nach oben gibt
stört nicht unbedingt, jede Klasse erbt eh mindestens von Object)
 
Zuletzt bearbeitet von einem Moderator:

irgendjemand

Top Contributor
@TO

dann mach es dir noch etwas einfacher ...

nach deiner beschreibung hast du "eine" super-klasse von der 5 GLEICHWERTIGE "sub-klassen" erben ... also alle auf einer ebene ... soweit korrekt ?

und 3 dieser 5 klassen sollen ein interface und eine methode implementieren welche exakt den selben inhalt hat ?

dann ist das ganze sehr einfach

auf deiner "ersten sub-ebene" nimmst du die 3 klassen die das interface implementieren RAUS und fügst dafür eine "zwischen" klasse ein die sowohl das interface als auch die methode implementiert ...

und von dieser zwischen-klasse lässt du nun die drei anderen erben ...


ansonsten musst du wirklich mal ein klassendiagramm erstellen und uns mal graphisch zeigen was du meinst ... weil nur mit worten schaffst du es ja scheinbar nicht dich klar auszudrücken
 
G

Gast2

Gast
Ich würde auch diesen Weg Vorschlagen:

1)2 erben direkt von der Basisklasse
2)Das Interface wird zur Klasse welche von der Basisklasse erbt.
3)Die 3 Klassen welches das Interface implementierten erben von der neuen Klasse und haben dioe Methode somit als auch alles von der Basis-Basisklasse geerbt.
 

x22

Bekanntes Mitglied
Jap.. Mehrfachvererbung gibt es nicht, das ist nur mitHilfe von interfaces in Java machbar.

Somit kannst du das Problem umgehen..


copy kappesf-> @aggree:

---------------------------------------------------
Ich würde auch diesen Weg Vorschlagen:

1)2 erben direkt von der Basisklasse
2)Das Interface wird zur Klasse welche von der Basisklasse erbt.
3)Die 3 Klassen welches das Interface implementierten erben von der neuen Klasse und haben dioe Methode somit als auch alles von der Basis-Basisklasse geerbt.
-----------------------------------------------------

Best regards,
x22
 

Luk10

Top Contributor
Danke für eure Hilfe!

Leider lässt sich nur bei einer Vererbungsstruktur eine gemeinsame Subebene erstellen. Funktioniert super und einfach, leider muss ich bei der anderen anders zurecht kommen. Ich hab jetzt die Lösung von SlaterB verwendet und es funktioniert soweit ganz gut.

Luk10
 

Marco13

Top Contributor
Bei 150 Zeilen könnte man auch in Erwägung ziehen, die Methode auszulagern (als public static utility methode) und in den Implementierungen dann nurnoch die zu verwenden, aber ... weiß halt nicht ob das hier passt...
 

faetzminator

Gesperrter Benutzer
Irgendwer hat mal gesagt, eine Methode soll nicht mehr als 7 Zeilen und zwei (oder einen?) Verschachtelungen besitzen (Schleifen etc.).
Meiner Meinung nach können es auch gerne Mal 10, 15 oder gar 20 Zeilen sein. Aber bei 150 solltest du dann über den Daumen geschätzt auch 10-20 Methoden haben. Aber warscheinlich wird es praktisch nicht so viel sein, weil du am Schluss sicherlich weniger Code haben wirst.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Fiedelbambu Vererbung JTabbedPane vererben in der MainView Java Basics - Anfänger-Themen 0
M Vererbung Enums vererben Java Basics - Anfänger-Themen 1
T Objekte in Listen vererben Java Basics - Anfänger-Themen 3
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
M Vererben von Superklasse ohne Konstruktor Java Basics - Anfänger-Themen 9
B Datentypen Enum vererben/gruppieren? Java Basics - Anfänger-Themen 6
B Vererbung Designproblem beim Vererben Java Basics - Anfänger-Themen 3
U Vererben von Singleton Java Basics - Anfänger-Themen 17
V OOP Statische Klassen-Attribute vererben Java Basics - Anfänger-Themen 4
M OOP GUI - Fenster vererben? Java Basics - Anfänger-Themen 9
K Methode vererben bei überschriebenem Konstruktor? Java Basics - Anfänger-Themen 14
C Liste mit Attribut Abstract vererben Java Basics - Anfänger-Themen 11
T OOP Klassenimport "vererben" Java Basics - Anfänger-Themen 2
A Statische Methode "vererben" - Zwang durch annotation processor Java Basics - Anfänger-Themen 10
Luk10 Vererben von private instanzvariablen Java Basics - Anfänger-Themen 20
T enum-Methoden "vererben" Java Basics - Anfänger-Themen 11
J Probleme beim Vererben Java Basics - Anfänger-Themen 2
Y Vererben - Konstruktoren Java Basics - Anfänger-Themen 2
P Attribute Vererben Java Basics - Anfänger-Themen 2
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
Luk10 Problematik großer Objekt-Erstellung / -Löschung Java Basics - Anfänger-Themen 2
R OutOfmemory Exception bei sehr großer Liste (Tomcat Webservice) Java Basics - Anfänger-Themen 4
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
D Sehr großer String lässt sich nicht bearbeiten Java Basics - Anfänger-Themen 7
G Vergleich großer Basen/Exponenten? Java Basics - Anfänger-Themen 3
B Großer Java bug beim rechnen? Java Basics - Anfänger-Themen 66
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
T Vererbung Interface Java Basics - Anfänger-Themen 5
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37

Ähnliche Java Themen

Neue Themen


Oben