Frage zur Vererbung

Status
Nicht offen für weitere Antworten.

Bodo1981

Mitglied
Ich habe eine Klasse Fahrzeug (Oberklasse) von dieser Klasse erben MuskelbetriebenesFahrzeug und MotorbertriebenesFahrzeug. Dann gibt es da noch eine Klasse Fahrrad die von Muskelbetriebenes Fahrzeug erbt. Alle Klassen besitzen eine fahren() Methode.

Nun hab ich mir eine Testklasse geschrieben, die das ganze testet. Dabei bin ich auf den folgenden Gedanken gekommen:

Ich erzeuge eine Instanz von Fahrrad. Die hat ja eine eigene Methode fahren. Ist es aber möglich mit dieser Instanz die fahren Methode von der Oberklasse Fahrzeug aufzurufen? Habs schon mit super() probiert geht aber leider nicht. Falls einer weis wie das geht, könnte er mir bitte den Aufruf schreiben.

Merci schonmal
 

KSG9|sebastian

Top Contributor
Code:
public class Fahren
{

	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		Fahrzeug f = new Fahrrad();
		f.fahren(200);

	}

}
public class Fahrrad extends Fahrzeug
{
	public void fahren(int meter){
		super.fahren(meter);
		
		System.out.println("Fahrrad fährt " + meter + " Meter.");
	}
}
public abstract class Fahrzeug
{
	public void fahren(int meter){
		System.out.println("Fahrzeug fährt " + meter + " Meter.");
	}

}

Ausgabe:

Code:
Fahrzeug fährt 200 Meter.
Fahrrad fährt 200 Meter.

Wie du siehst, es funktioniert mit "super"

Gruß
 

Bodo1981

Mitglied
Ja so hab ich es dann auch gelöst, aber ich mein jetzt ist es möglich in der Main-Methode direkt die Methode fahren() von Fahrzeug aufzurufen oder geht das nur so?
 

EOB

Top Contributor
ne, geht wirklich nur so. wenn dein fahrzeug ein fahhrad ist, wird auch diese methode aufgerufen.

grüße
 

Bodo1981

Mitglied
Merci für die schnelle Antwort. Jetzt hab ich aber noch ne Frage:

Und zwar hab ich eine Klasse FahrradMitHilfsmotor die soll von Fahrrad UND MotorbetriebenesFahrzeug erben. Ich weis das es keine Mehrfachvererbung mit extends in Java gibt. Wie setz ich das trotzdem am besten um? Interface oder abstrakte Klassen?
 

KSG9|sebastian

Top Contributor
Abstrakte Klasse wird dir nicht viel helfen. Wobei das vom Vererbungsbaum her nicht sinnvoll ist.

MusekelbetriebensFahrzeug und MotorbetriebenesFahrzeug stehen im Vererbungsbaum nebeneinander. Fahrrad ist eine spezielisierung von Museklbetriebenesfahrzeug. Jetzt willst du ne Querverbindung herstellen. Halte das nicht für sinnvoll.

Könntest das z.B. über eine separate Oberklasse wie z.B. DualangetriebenesFahrzeug machen. (würghs, was für ein Name)
 

Bodo1981

Mitglied
Respekt für den geilen Namen ;-) Stimmt das wär auch noch ne Möglichkeit, aber angenommen ich bilde mir ein Interface ein. Wie würde das genau gehen?
 

EOB

Top Contributor
eine frage, was machst du, wenn du noch 10 weitere fahrräder hast (fahrradmitgrosserklingel, fahrradmitdickenreifen,....)? willst du dann pro fahrrad eine anlegen?

eventuell könnte man hier das dekorator muster anwenden. *schlautu*
also du hast dein fahrrad und dekorierst es mit motor und so weiter.

grüße
 

EOB

Top Contributor
da haste recht....over engineering ist auch nicht gut :). aber wenns dann mehr wird, kommt es früher oder später zu unübersichtlichem code. solange wirklich nur der hilfsmotor da ist, könnte man das wohl mit nem booleschen wert steuern. sinds aber eben mehr, wirds unübersichtlich und dadurch auf fehleranfälliger.

grüße
 

hupfdule

Top Contributor
EOB hat gesagt.:
da haste recht....over engineering ist auch nicht gut :). aber wenns dann mehr wird, kommt es früher oder später zu unübersichtlichem code. solange wirklich nur der hilfsmotor da ist, könnte man das wohl mit nem booleschen wert steuern. sinds aber eben mehr, wirds unübersichtlich und dadurch auf fehleranfälliger.

Dann ist auch die richtige Zeit zum Refactoring. Over Engineering ist viel schlimmer. Ich habe es nun schon in mehreren Projekten erlebt, dass die ursprünglichen Entwickler sich eine ganz tolle Architektur mit allen möglichen Entwurfsmustern ausgedacht haben und am Ende konnte niemand mehr den Code durchblicken vor lauter Interfaces, abstrakten Klassen etc.

Der Code und die gesamte Architektur sollte immer so einfach wie möglich gehalten werden. So lange nicht absehbar ist, dass neue Klassen wirklich gerechtfertigt sind, sollte diese weggelassen werden. Außerdem zwingt das später zu einem anständigen Refactoring. Was auch ein Punkt ist, der in der Praxis viel zu sehr vernachlässigt wird. ;-)
 

Tellerrand

Bekanntes Mitglied
Bodo1981 hat gesagt.:
Respekt für den geilen Namen ;-) Stimmt das wär auch noch ne Möglichkeit, aber angenommen ich bilde mir ein Interface ein. Wie würde das genau gehen?

Mein Vorschlag dazu als Skizze:
Interface Muskelbetrieben
Interface Motorbetrieben

abstract Fahrzeug
MotorbetriebenesFahrzeug extends Fahrzeug implements Motorbetrieben
MuskelFahrzeug extends Fahrzeug implments Muskelbetrieben
DualbetribenesFahrzeug extends Fahrzeug implements Muskelbetrieben, Motorbetrieben


Over Engineering:
Klar wenn 5 Entwickler versuchen ein großes Projekt zu realisieren und dann jeder auch alles verstehen will entstehen Probleme.
Das OOP Konzept ist ja gerade so gestaltet, dass man nicht alles verstehen muss. Die Java Referenzen sind ein gutes Beispiel dafür, wer kennt sich schon mit allen mitgelieferten Paketen und Klassen aus. (Und wozu sollte man das?)
"Der Code und die gesamte Architektur sollte immer so einfach wie möglich gehalten werden."
Wenn der Entwickler es nicht einfacher macht, dann macht er in meinen Augen was falsch ;)
Da stimme ich zu, Klassen und Interfaces nur, wenn man sie braucht, bzw. sie es vereinfachen. Interfaces nachträglich zu extrahieren ist dank den netten Enwicklungsumgebungen auch kein problem.

Meiner Meinung nach ist es hier z.B. erstmal die Frage, ob das Programm zwei verschiedene Antriebe unterschiedlich bearbeiten muss.
Wenn ja ist mir eine unterschiedliche fahren() Implementierung lieber, als später im Code zig Stellen if(ding.isMotorbetrieben()) zu haben.
Sollten die Interfaces keine unterschiedlichen Methoden beherbergen, dann lässt man auch diese lieber. Markierungsinterfaces werden ab und an mal verwendet, aber sie sind nicht das erste Mittel der Wahl.
 

EOB

Top Contributor
so entstünde aber viel doppelter code. jedes fahrzeug, was jetzt muskelbetrieben oder motorbetrieben ist, muss den code implementieren, auch wenn es genau gleich funktionieren würde. finde ich nicht so gut. eine lösung wäre ein interface in der art:

Code:
interface Driven{
    drive();
}

und dann jeweils

Code:
class MotorDriven implements Driven{
    drive(){
        //fahre mit motor
    }
}

class MuscleDriven implements Driven{
    drive(){
        //fahre mit muskelkraft
    }
}

dann eben jeweils die passende methode aufrufen...imho.

grüße
 

nols

Mitglied
muss es nicht, da muskelbetrieben und motorbetrieben abstrakte Klassen sind, kann diese die Funktion implementieren.
Und wenns nötig ist wird sie halt überschrieben.

Oder seh ich jetzt vor lauter Wald die Bäume nicht?
 

Tellerrand

Bekanntes Mitglied
Ja, das sind schon Klassen, ob sie abstrakt sein sollten sei mal dahingestellt.
Wobei es sinnig wäre die beiden Interfaces noch von einem gemeinsamen Interface erben zu lassen. (Fällt mir grad so ein ;))
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
T Deutschverständnis-Frage zur Vererbung Java Basics - Anfänger-Themen 5
E Vererbung Frage zu Zugriffsrechten/Vererbung Java Basics - Anfänger-Themen 3
X Vererbung Vererbung Frage Java Basics - Anfänger-Themen 6
S Frage zu Vererbung und return. Java Basics - Anfänger-Themen 4
H Vererbung theoretische Frage zur Vererbung/Methoden Java Basics - Anfänger-Themen 7
X Frage zur Vererbung (bzgl Supercontruktor) Java Basics - Anfänger-Themen 7
F Vererbung (einfache Frage) Java Basics - Anfänger-Themen 5
N Frage zur Vererbung/Überladung Java Basics - Anfänger-Themen 3
B Frage zu Vererbung Java Basics - Anfänger-Themen 17
D Frage zur Vererbung Java Basics - Anfänger-Themen 45
0 Eine Frage zur Vererbung... Java Basics - Anfänger-Themen 2
T Frage zu Vererbung beim Collection-Framework Java Basics - Anfänger-Themen 4
Z Frage zur Vererbung. Java Basics - Anfänger-Themen 16
P einfach frage zur vererbung Java Basics - Anfänger-Themen 9
G Frage zur Vererbung und überschreiben von Methoden Java Basics - Anfänger-Themen 6
G frage zu vererbung (super) Java Basics - Anfänger-Themen 10
C Frage zu Vererbung Java Basics - Anfänger-Themen 2
I Frage zur Vererbung Java Basics - Anfänger-Themen 14
F Frage zur Vererbung und Zugriffmodifikator private Java Basics - Anfänger-Themen 3
S Frage zum Design der Vererbung (Kartendeck und Dupletten) Java Basics - Anfänger-Themen 12
R Frage wegen Vererbung Java Basics - Anfänger-Themen 5
A Frage zur Vererbung Java Basics - Anfänger-Themen 7
J Frage zum Quellcode - Zusammhänge und Ablauf. Java Basics - Anfänger-Themen 2
D Erste Schritte Frage eines absoluten Anfängers Java Basics - Anfänger-Themen 3
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
I Frage Thymeleaf -> Prefix / Suffix ändern? Java Basics - Anfänger-Themen 11
D Rekursions Probleme / frage Java Basics - Anfänger-Themen 4
T Frage zu Parse Java Basics - Anfänger-Themen 2
H Frage an die Profis Java Basics - Anfänger-Themen 4
J Eine konzeptionelle Frage zu OOP Java Basics - Anfänger-Themen 3
P Frage zu Rekursion und Backtracking Java Basics - Anfänger-Themen 2
H Frage zur Ausgabe Java Basics - Anfänger-Themen 4
H Frage zu arithmetischen Operationen Java Basics - Anfänger-Themen 20
F Kurze Frage zu replace() Java Basics - Anfänger-Themen 19
JavaSchmecktLecker Polymorphie Frage zur Methodenüberschreibung Java Basics - Anfänger-Themen 21
J Frage zu einem "Taschenrechner" code Java Basics - Anfänger-Themen 9
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
DoubleM Runtime.getRuntime().exec Frage Java Basics - Anfänger-Themen 2
J Eine theoretische Frage zur Praxis - JPanel oder Canvas Java Basics - Anfänger-Themen 5
O Frage: Formaler Typbezeichner? Java Basics - Anfänger-Themen 3
I BlueJ Queue Frage für Klausur Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
N Spezielle frage zum Comparator Java Basics - Anfänger-Themen 6
L Frage zum Array Java Basics - Anfänger-Themen 1
A Frage zum UML Design Java Basics - Anfänger-Themen 1
I Hilfe bei Klausur Frage Java Basics - Anfänger-Themen 8
izoards Drucken Frage zu FAQ Beitrag Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
sserio Split() -> Regex Frage. Java Basics - Anfänger-Themen 7
A OCA Study Guide: 2. Frage aus Kapitel 3 Java Basics - Anfänger-Themen 9
sserio Date Library Frage Java Basics - Anfänger-Themen 9
Max246Sch Frage zu Währungsrechner Code Java Basics - Anfänger-Themen 2
sserio Frage zu HashMaps Java Basics - Anfänger-Themen 20
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
sserio Frage zu Lambda Ausdrücken Java Basics - Anfänger-Themen 7
sserio Frage zu BigInteger Java Basics - Anfänger-Themen 1
D Frage bzgl. Enum-Handhabung Java Basics - Anfänger-Themen 16
xxx12 Frage Java Basics - Anfänger-Themen 2
I Generelle Frage zu Mikroservices (Spring Boot?), Docker... Java Basics - Anfänger-Themen 7
R Frage zu Methoden (Rückgabewert u. ohne.) Java Basics - Anfänger-Themen 2
A Frage zur programmierung Java Basics - Anfänger-Themen 12
M Frage zur Methode split der Klasse String Java Basics - Anfänger-Themen 32
R Input/Output Frage zu Java IO Java Basics - Anfänger-Themen 6
M Frage zu printWriter Java Basics - Anfänger-Themen 5
C Frage zu OLSMultipleLinearRegression Java Basics - Anfänger-Themen 31
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
F Frage betreff Programm mit dem man C++-Code in JAVA-Code übersetzen lassen kann Java Basics - Anfänger-Themen 2
L Frage zur Ticket Maschine Java Basics - Anfänger-Themen 1
J Frage zu OOP-Klassendiagramm Java Basics - Anfänger-Themen 8
OSchriever Frage zu Compiler Java Basics - Anfänger-Themen 8
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
Bademeister007 Hallo Leute ich hab eine Frage zur ArrayList Java Basics - Anfänger-Themen 8
F Frage betreff Programmierbücher zu Lagerverwaltung als Konsolenprogramm Java Basics - Anfänger-Themen 3
dieter000 Kurze Frage kann mir ejmand kurz diesen Code erklären, bzw wie man die zeilen erklärt und so Java Basics - Anfänger-Themen 1
I String.split regex Frage Java Basics - Anfänger-Themen 2
N Best Practice Frage zum MVC-Pattern Java Basics - Anfänger-Themen 2
dieter000 Frage zu einem Beispiel... Java Basics - Anfänger-Themen 5
J Frage zum Loggen Java Basics - Anfänger-Themen 18
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
Zrebna Frage zum "Referenzen-konzept" in Java Java Basics - Anfänger-Themen 8
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
N Input/Output Eine Frage über system.out.println. Java Basics - Anfänger-Themen 10
B Erste Schritte Learning Coding (!) Frage an erfahrene Programmierer. Java Basics - Anfänger-Themen 23
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
C Exception-Frage Java Basics - Anfänger-Themen 3
J Eine Frage zur Schreibweise == ? : Java Basics - Anfänger-Themen 3
S Frage des Designs Java Basics - Anfänger-Themen 1
JavaTalksToMe Extends/Implements Frage Java Basics - Anfänger-Themen 3
pkm Frage zu Servletfunktion Java Basics - Anfänger-Themen 0
B Frage zur Währungsumrechnung Java Basics - Anfänger-Themen 3
S Allgemeine Frage über Generics und Vererbungen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben