Was nutzen statt Mehrfachvererbung?

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi!
ja, ich weiss Java hat keine Mehrfachvererbung und ich weiss auch, dass man statt dessen Interfaces nehmen soll, aber da die ja nunmal keine Implementierung enthalten dürfen sind die nicht das, was ich brauche...
Ich beschreibe euch mal was ich hab und wie ich's lös und wenn jemand vorschläge hat wie's eleganter geht, immer her damit

Nicht wirklich veränderbare Vorgabe:
Code:
public abstract class a extends irgendwas{

   protected abstract void x();

   public void y() {
      x();
   }

   public void z() {
      y();
   }
}


public class i1 extends a {

   protected void x(){
       ...
   }

}

 [...]

public class i9 extends a {

   protected void x(){
       ...
   }

}


Jetzt brauche ich eigentlich Klassen d1 bis d9, die genauso arbeiten wie i1 bis i9, aber bei denen y() anders implementiert ist...

Momentan ist das bei mir so:
Code:
public class d1 extends i1 {

   protected void y(){
       ...
   }

}

 [...]

public class d9 extends i9 {

   protected void y(){
       ...
   }

}

Das geht so, aber ist halt eigentlich unschön, weil ich jetzt 9 mal den selben code hab, bei dem sich nur das extends unterscheidet... Also vielelicht sollte ich nochmal explizit sagen, die x() arbeiten alle unterschiedlich, aber die neuen y() sind alle gleich...

BTW sorry für die Namen, beim Versuch, euch die wirren Klassennamen und so zu ersparen hab ich glaub ich was genauso wirres erzeugt...

Danke an jeden der sich die Mühe gemacht hat das zu lesen :)
Jan
 

Wildcard

Top Contributor
Wenn du das größere Konzept beschreibst anstatt nur deinen bisherigen Lösungsansatz, dann findet sich vielleicht eine elegantere Lösung. Nebenbei bemerkt: Interfaces sind kein Ersatz für Mehrfachvererbung, es handelt sich um Mehrfachvererbung (nur keine Mehrfachvererbung von Implementierungen)
 
M

maki

Gast
Kannst auch eine abstrakte Klasse schreiben, welche die Methode des Interfaces implementiert, die (fast) gleich ist.
 

SnooP

Top Contributor
Interfaces sind schon ein Ersatz für Mehrfachvererbung, da man dadurch einer Klasse eine Menge verschiedener Methoden vorgeben kann, die aus zwei oder mehr Interfaces stammen.

Die Implementierung dieser Methoden kann man dann z.B. durch Delegates lösen, d.h. anstatt jedes Mal die Methoden neu zu implementieren, schreibt man eine Klasse, die die Implementierung dieser Methoden erledigt, und die Interface-Methoden verweisen dann immer auf das Delegate.
 
G

Gast

Gast
Okay, meine Formulierung war vielleicht schlecht... Bitte nicht weiter streiten ob das ein Ersatz ist oder the real thing...

Okay, das grössere Konzept... Hm, ich soll eine Erweiterung für ein bestehendes Programm schreiben, die dafür sorgt, dass bestimmte Methoden nicht lokal arbeiten sondern rechenaufwendige Aufgaben übers Netzwerk an andere Rechner schicken...
Dabei ist mir halt aufgefallen, dass mehrere von den Klassen extrem ähnlich sind...
Naja, und die einzige öffentliche Methode entsteht irgendwo weiter oben in der Vererbungskette und stösst mehrere private Sachen an die an unterschiedlichen Stellen der Kette dazu kommen...
Und eine davon muss ich verändern, damit der Daten verschickt...
Naja, da die einzelnen Klassen an sich so arbeiten müssen wie die originale, sollten die halt von den originalen erben, aber alle ein paar der geerbten Methoden verändern...

Am schönsten wäre es natürlich, einfach in die Kette rein zu greifen und die eine Methode zu ändern, aber dann geht das halt nicht mehr so wie vorher und dass soll bestehen bleiben...
 
M

maki

Gast
Am Rande des Geländers: "Echte" Mehrfachvererbnung sorgt für mehr Probleme als Lösungen, es war Absicht keine Mehrfachvererbung für Implementierungen zuzulassen.

Vielleciht ist ja das Strategy Pattern einen Blick wert?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wieso sollte man Null-Prüfungen nicht mit Optional-Objekten nutzen? Allgemeine Java-Themen 13
berserkerdq2 Shapes als Buttons nutzen, schlechter Programmierstyle? Allgemeine Java-Themen 1
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
X Java gewerblich nutzen mit externe Bibliothek. Was zu beachten? Allgemeine Java-Themen 18
F Junit Test + Cucumber - JSON auslesen und in einem weiteren Schritt nutzen Allgemeine Java-Themen 0
xYurisha Nutzen von Importmethoden bei Klasseninstanzen Allgemeine Java-Themen 12
Neumi5694 Best Practice Vorhandene Programminstanz nutzen Allgemeine Java-Themen 3
S Eclipse Github Projekt in eigenes Projekt einbinden und nutzen Allgemeine Java-Themen 13
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
I Programm im Hintergrund bei Windows zur Steuerung der Tastatur nutzen Allgemeine Java-Themen 2
Neumi5694 Offenes Programm nutzen Allgemeine Java-Themen 4
T javax.script (JavaScript): Nicht-JRE-Packages importieren/nutzen Allgemeine Java-Themen 4
S Welche Nutzen bringen Lamda Expressions? Allgemeine Java-Themen 1
B Lua als Konfigurationsdatei nutzen - ein Krampf Allgemeine Java-Themen 4
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
A COM und JAVA nutzen Allgemeine Java-Themen 1
J C++ Projekt (QT) in Java mit Klassen (nicht imperativ) nutzen (BridJ? JavaCPP? SWIG? JNA? JNI?) Allgemeine Java-Themen 2
D Nutzen, erst deklarieren, oder neu erstellen? Allgemeine Java-Themen 11
S lp_solve mit Java nutzen - Can't find dependent libraries Allgemeine Java-Themen 8
T HTTP HttpWebRequest in Swing-Projekt nutzen Allgemeine Java-Themen 4
M DLL aus jar extrahieren und als lib nutzen Allgemeine Java-Themen 24
G RXTX in proprietärer Software nutzen?! Allgemeine Java-Themen 10
C Variablen Variable einer Klasse in einer anderen Klasse Nutzen Allgemeine Java-Themen 8
thetagman Programmidee: VirtualCorkboard - Evaluation, Nutzen & Meinung Allgemeine Java-Themen 12
D Darf ich jakarta bibliotheken ohne weiteres nutzen? Allgemeine Java-Themen 10
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
C Kann Methode nicht aus Klassenname implements Runnable nutzen Allgemeine Java-Themen 7
G C# DLL in Java nutzen Allgemeine Java-Themen 4
T cpp Programm via jna in java nutzen Allgemeine Java-Themen 3
Meldanor Datei aus jar nutzen Allgemeine Java-Themen 4
J Alte version nutzen Allgemeine Java-Themen 4
M Rechenweg in Datenbank speichern und nutzen Allgemeine Java-Themen 6
G konstanter String[] laesst sich nicht in Annotation nutzen Allgemeine Java-Themen 2
G Variable global nutzen Allgemeine Java-Themen 4
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
H StartupFolder nutzen! Aber wie? Allgemeine Java-Themen 4
D Einfaches Nutzen von Plugins mittels generischer Methode Allgemeine Java-Themen 3
V Setter zum Berechnen nutzen? Allgemeine Java-Themen 5
R Wie Google & Co mit Java nutzen? Allgemeine Java-Themen 16
W InputStream öfters nutzen Allgemeine Java-Themen 9
H einzelner Thread --> Nutzen?! Allgemeine Java-Themen 3
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
G DB connection in anderen Klassen nutzen! Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
E NT-Anmeldung in Java Client-Applikation nutzen. JAAS ? Allgemeine Java-Themen 5
M java api offline nutzen? Allgemeine Java-Themen 4
J COM-Port unter Windows nutzen Allgemeine Java-Themen 2
B Programm unter GPL nutzen Allgemeine Java-Themen 6
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
T GPL Code inkommerzieller Software nutzen? Allgemeine Java-Themen 26
G Funktionstasten nutzen Allgemeine Java-Themen 3
S Klassen aus JDK 1.5. außerhalb von 1.5. nutzen Allgemeine Java-Themen 6
S MediaTracker nutzen um festzustellen ob schreibvorgang ende. Allgemeine Java-Themen 5
M Webstart nutzen? Allgemeine Java-Themen 9
thE_29 Externe (unbekannte) Klasse nutzen Allgemeine Java-Themen 11
P DLLs nutzen Allgemeine Java-Themen 3
S Textdatei statt von Dateisystem aus .jar lesen Allgemeine Java-Themen 3
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
M Bei String.format ein Komma statt einem Punkt ausgeben lassen Allgemeine Java-Themen 1
A was kann ich nehmen als statt IsHitBy? Allgemeine Java-Themen 3
das_leon Komma statt Punkt Allgemeine Java-Themen 10
F Java moved Files statt sie zu kopieren Allgemeine Java-Themen 12
D Class<CAP#1> statt Class<...> Allgemeine Java-Themen 5
M Generics (bounded wildcards statt Interface Bezeichnern) -- Sinn oder Unsinn? Allgemeine Java-Themen 2
P Datentypen float mit komma statt punkt möglich? Allgemeine Java-Themen 6
D Shortcut statt Datei einlesen Allgemeine Java-Themen 2
K Collection.contains()/retainAll() mit Referenzgleichheit statt equals()? Allgemeine Java-Themen 2
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
R Dateiarbeit: In Datei weiterschreiben statt überschreiben Allgemeine Java-Themen 5
P SFTP mit ppk key statt openssh key Allgemeine Java-Themen 4
Meldanor For-Schleifen - byte statt int? Allgemeine Java-Themen 11
S indize statt split() Allgemeine Java-Themen 10
P Wieso HashMap-Zugriff mit Object, statt mit MyObject? Allgemeine Java-Themen 12
G Arraylist statt List - Sehr schlimm? Allgemeine Java-Themen 8
N Hilfe: Bekomme statt '>' '&gt;' . Allgemeine Java-Themen 11
H Referenzen statt Objekte für große Speicherstrukturen Allgemeine Java-Themen 19
L Zwei Hashtables statt einer? Allgemeine Java-Themen 6
E Statt HashSet die TreeSet verwenden Allgemeine Java-Themen 4
R Window statt Frame Allgemeine Java-Themen 6
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
D Vererbung Mehrfachvererbung Allgemeine Java-Themen 7
D Warum keine Mehrfachvererbung? Allgemeine Java-Themen 5
P fehlende Mehrfachvererbung logging.Handler impl. Observable Allgemeine Java-Themen 5
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
C Mehrfachvererbung Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben