Überschreiben und Überladen

baker333

Bekanntes Mitglied
Servus,

könnte mir jemand bitte erklären, warum im unteren Code bei "fahrzeug1.fahre(kind, erwachsener)" die Ausgabe "Person und Erwachsener in Auto" erscheint. Es gibt doch in der Klasse Auto die passende Methode fahre(Kind kind, Erwachsener erwachsener).

Danke

Java:
class Person {}
class Erwachsener extends Person {}
class Kind extends Person {}
class Fahrzeug {
 public void fahre(Person person, Person person2) {
 System.out.println("Person und Person in Fahrzeug");
 }
 public void fahre(Person person, Erwachsener erwachsener) {
 System.out.println("Person und Erwachsener in Fahrzeug");
 }
}
class Auto extends Fahrzeug {
 public void fahre(Person person, Erwachsener erwachsener) {
 System.out.println("Person und Erwachsener in Auto");
 }
 public void fahre(Kind Kind, Erwachsener erwachsener) {
 System.out.println("Kind und Erwachsener in Auto");
 }
}
class Boot extends Fahrzeug {
 public void fahre(Person person, Erwachsener erwachsener) {
 System.out.println("Person und Erwachsener in Boot");
 }
 public void fahre(Kind Kind, Erwachsener erwachsener) {
 System.out.println("Kind und Erwachsener in Boot");
 }
}
class Gummiboot extends Boot {
 public void fahre(Person person, Erwachsener erwachsener) {
 System.out.println("Person und Erwachsener in Gummiboot");
 }
}
public class Main {
 public static void main(String[] args) {
 Person person = new Person();
 Erwachsener erwachsener = new Erwachsener();
 Kind kind = new Kind();

 Fahrzeug fahrzeug1 = new Auto();
 Fahrzeug fahrzeug2 = new Gummiboot();
 Boot boot = new Gummiboot();

 fahrzeug1.fahre(kind, erwachsener);
 fahrzeug1.fahre(person, erwachsener);
 fahrzeug2.fahre(kind, kind);
 boot.fahre(erwachsener, erwachsener);
 boot.fahre(kind, erwachsener);
 }
}
 

mihe7

Top Contributor
könnte mir jemand bitte erklären, warum im unteren Code bei "fahrzeug1.fahre(kind, erwachsener)" die Ausgabe "Person und Erwachsener in Auto" erscheint. Es gibt doch in der Klasse Auto die passende Methode fahre(Kind kind, Erwachsener erwachsener).
Salopp formuliert: Du deklarierst fahrzeug1 vom Typ Fahrzeug. Daher stehen auch nur die Methoden aus Fahrzeug zur Verfügung. Wenn Du mit Kind (extends Person) und Erwachsener aufrufst, wird die Methode Fahrzeug#(Person, Erwachsener) verwendet. Diese wird in Auto überschrieben.
 

baker333

Bekanntes Mitglied
Wobei mir gerade nicht ganz klar ist: Wenn ich ein Fahrzeug deklariere, wieso kann er dann eine Methode in Auto überschreiben, wenn ich eigentlich ein Fahrzeug habe. Warum erhalte ich nicht "Person und Erwachsener in Fahrzeug"?
 

baker333

Bekanntes Mitglied
Trotzdem frage ich mich noch:
Wenn ich ein Fahrzeug deklariere, wieso kann er dann eine Methode in Auto überschreiben, wenn ich eigentlich ein Fahrzeug habe.

Ich glaube, dass mir :

Fahrzeug fahrzeug1 = new Auto(); noch nicht so richtig vorstellen kann. Einerseits ist jedes Auto ein Fahrzeug, deswegen kann ich ein Auto als Fahrzeug definieren, andererseits habe ich ja trotzdem ein Fahrzeug. Warum kann meine Methode "fahre" der Klasse Fahrzeug von der Methode "fahre" der Klasse Auto überschrieben werden?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Überschreiben/Überladen Methode Java Basics - Anfänger-Themen 6
K Überschreiben und Überladen Java Basics - Anfänger-Themen 3
K Überladen und Überschreiben von Methoden Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
B Überschreiben und verdecken Java Basics - Anfänger-Themen 1
R Schreibzugriff bei jedem Überschreiben? Java Basics - Anfänger-Themen 6
C Überschreiben von Methoden Java Basics - Anfänger-Themen 3
H Polymorphismus-Überschreiben Java Basics - Anfänger-Themen 1
F Überschreiben nach einer Vererbung Java Basics - Anfänger-Themen 2
A HashCode Überschreiben Java Basics - Anfänger-Themen 2
K Überschreiben einer "super.super"-Methode Java Basics - Anfänger-Themen 6
M Überschreiben von JPanels funktioniert nicht! Java Basics - Anfänger-Themen 9
buntuswalus OOP Überschreiben von Eigenschaften Java Basics - Anfänger-Themen 8
T Polymorphie:Überschreiben der Methode klappt nicht Java Basics - Anfänger-Themen 4
0 Überschreiben von pai*tBackground() Java Basics - Anfänger-Themen 2
G Überschreiben einer Variable umgehen Java Basics - Anfänger-Themen 6
G Überschreiben von Methoden beim Casting Java Basics - Anfänger-Themen 7
O Überschreiben erzwingen Java Basics - Anfänger-Themen 6
W Überschreiben von Elternklasse Java Basics - Anfänger-Themen 15
M JFileChooser Überschreiben Dialog? Java Basics - Anfänger-Themen 2
G Frage zum Überschreiben einer Klasse Java Basics - Anfänger-Themen 6
W Überschreiben und Methodenaufruf Java Basics - Anfänger-Themen 3
D Überschreiben Java Basics - Anfänger-Themen 9
lallmichnichtzu Methoden Überladen des .equals-Operators Java Basics - Anfänger-Themen 6
D Zwei Generics beim Überladen von Methoden Java Basics - Anfänger-Themen 3
A Überladen von Konstruktoren Java Basics - Anfänger-Themen 2
H Überladen Verständnis Java Basics - Anfänger-Themen 3
N Überladen über mehrere Klassen hinweg? Java Basics - Anfänger-Themen 3
T Überladen von Methoden und Spezialisierung Java Basics - Anfänger-Themen 7
G Überladen von Konstruktoren mit unterschiedlichen Datentypen Java Basics - Anfänger-Themen 4
S Überladen von Funktionen vermeiden Java Basics - Anfänger-Themen 5
K Überladen von Methodenaufrufen Java Basics - Anfänger-Themen 3
S Überladen des + Operators? Java Basics - Anfänger-Themen 6
G Keine Ahnung! Überladen? Java Basics - Anfänger-Themen 11
T Überladen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben