Klassen Feste und veränderbare Typen in Hierarchien

Dasha

Mitglied
Hi,

Ich komme momentan bei einen Projekt nicht weiter:
(Ich darf keine Instanzvariablen benutzen nur Methoden und Rückgabewerte)
Nicht über die dummen Werte und den Sinn wundern, ich hab es nur vereinfacht es geht mir ums Prinzip! :)

Klasse Auto erbt von Klasse Fahrzeug:
Fahrzeug hat die Methode:

Java:
 public int preis()
   {
       return 1;
   }

Das ist ein Standartpreis.
Den Preis für alle Fahrzeuge, die keinen eigenen Preis haben, wird in dieser Methode festgelegt.



Die Klasse Auto hat auch die "selbe" methode aber der Preis ist anders.
Das war meine Idee, aber die Methode überschreibt ja nicht die Methode der Superklasse. Also wird immer nur die Methode int preis() von der Superklasse benutzt.

Java:
 public int preis()
   {
       return 20;
   }


Die Klasse Fahrzeug rechnet dann mit dem Preis.
Ich kann aber keine Parameter bei der Methode benutzen weil ich überall wo mit den Preis gerechnet wird "public int preis(Wert)" schreiben müsste.
Aber da ich keinen Parameter habe, kann ich auch nicht von der Unterklasse "Auto" den Preis mit "super.preis(Wert)" ändern.

Hat jemand Lösungsvorschläge?
-Keine Instanzvariablen
-Der Preis darf nur an einer Stelle vorkommen und soll dort auch geändert werden können.
-Der Preis muss für alle Fahrzeuge, muss in der Klasse "Fahrzeuge" änderbar sein und für die Klasse "Auto" muss ich den Preis in der Klasse "Auto" ändern können.

Wenn ich ein Objekt Auto erstelle muss ich von dort auf die Methode der Superklasse zugreifen können und den Wert dort ändern, überschreiben oder übergehen.
Aber wie gesagt ich kann keine Parameter benutzen, weil sonst der Parameter Preis mehrfach im Code auftauchen würde.

mfg
 
G

Gast2

Gast
Das war meine Idee, aber die Methode überschreibt ja nicht die Methode der Superklasse. Also wird immer nur die Methode int preis() von der Superklasse benutzt.
Doch, genau das macht sie. Wenn du preis() auf ne Instanz der Unterklasse aufrufst bekommst du den geänderten Preis, in deinem Fall also 20.

Die Klasse Fahrzeug rechnet dann mit dem Preis.
Ich kann aber keine Parameter bei der Methode benutzen weil ich überall wo mit den Preis gerechnet wird "public int preis(Wert)" schreiben müsste.
Aber da ich keinen Parameter habe, kann ich auch nicht von der Unterklasse "Auto" den Preis mit "super.preis(Wert)" ändern.
Erklär das mal bitte etwas genau, eventuell auch mit ein bissl Code, ich hab keine Ahnung was du da willst.
 

Dasha

Mitglied
Stimmt, ihr habt recht es wird wirklich überschrieben :)
Ich hab vermutlich irgendwas beim Testen vergessen oder irgendwas falsch eingegeben.

Aber warum es genau überschrieben wird ist mir noch etwas unklar, deswegen dachte ich auch es geht nicht so wie ich es gemacht habe.
Wenn ich eine Methode in der Hierarchie aufrufe wird ja von unten nach oben getestet ob diese Methode existiert. In meinen Fall wird erst bei der Unterklasse geschaut und dort wird die Methode

Java:
public int preis()
   {
       return 20;
   }

gefunden.

So jetzt existiert aber in der Superklasse auch die Methode + die Rechnung:

Java:
public int preis()
   {
       return 20;

}

public int preisMalPreis()
{
return preis() *preis();
}

Wie darf ich mir das überschreiben genau vorstellen?
Beim Compilen geht er durch und macht aus den ganzen Klassen in der Vererbungsstruktur eine ganze Klasse, puzzelt alles zusammen?
Also überschreiben heißt: "Wenn ich die Superklasse die Methode "preis()" hat können die ganzen Superklassen auch die Methoden haben aber die werden gar nicht berücksichtigt.

mfg
 
B

bygones

Gast
compiler != runtime...

der compiler puzzelt da keine klassen zusammen.... es gibt fuer jede klasse ein eigenes .class file

ueberschreiben heisst einfach dass du eine methode mit der selben Signatur in einer Unterklasse definiert. Wenn du dann eine Instanz der Unterklasse hast wird dort die methode genommen. Ist dort keine definiert, wird in der/den Superklasse(n) geschaut.
 

Gregorrr

Bekanntes Mitglied
Ja, genau. Die Entscheidung, welche Methode aufgerufen wird, wird erst zur Laufzeit bestimmt. Denn das ist abhängig von dem Objekt, welches gerade der Variablen zu einem bestimmten Zeitpunkt zugewiesen wird - was sich ja auch ändern kann.

Dass aber eine bestimmte Methode überhaupt ausgeführt werden kann wird schon zur Kompilierungszeit durch den Typ bestimmt. Somit ist sichergestellt, dass es eine Implementierung dieser Methode gibt.

Das fasst man im großen und ganzen übrigens zum Begriff Polymorphismus zusammen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Feste Reihenfolge von dem Ablauf von Methoden Java Basics - Anfänger-Themen 7
M JComboBox feste double Werte zu ordnen Java Basics - Anfänger-Themen 8
Z ArrayList direkt feste Größe mitgeben Java Basics - Anfänger-Themen 13
M Feste Größe des JFrames - Problem mit Dimension Java Basics - Anfänger-Themen 6
N Feste Hardcodierte Pfade im Quellcode Java Basics - Anfänger-Themen 6
T JSpinner feste Spaltenbreite? Java Basics - Anfänger-Themen 3
G Feste Fenstergröße? Java Basics - Anfänger-Themen 4
G Keine feste Länge bei Objekten, warum nur Zeiger? Java Basics - Anfänger-Themen 8
G JLabel feste größe geben!? Java Basics - Anfänger-Themen 3
G Veränderbare Zahl in Textfeld schreiben Java Basics - Anfänger-Themen 7
C Parameter in verschiedenen Anzahl und Typen Java Basics - Anfänger-Themen 6
Henri Problem von Typen Java Basics - Anfänger-Themen 7
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Literale für primitive Daten Typen Java Basics - Anfänger-Themen 4
N Enum Typen, was passiert intern mit ihnen? Java Basics - Anfänger-Themen 2
O Generische Typen Java Basics - Anfänger-Themen 9
L Abstrakte Typen und Schnittstellen Java Basics - Anfänger-Themen 19
BadBat Variablen Eine Variable mit 2 Typen Java Basics - Anfänger-Themen 38
D Generische Typen Java Basics - Anfänger-Themen 20
P Liste sortieren verschiedener generischer Typen Java Basics - Anfänger-Themen 4
T Interface implementieren mit Abstrakten Typen? Java Basics - Anfänger-Themen 4
K Datentypen Kurzform Addition geht, Langform scheitert am Typen Java Basics - Anfänger-Themen 6
K Frage zu Referenzvariablen und deren Typen Java Basics - Anfänger-Themen 6
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
B Elementare Typen und Referenztypen Java Basics - Anfänger-Themen 6
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
B dynamische/statische Typen Java Basics - Anfänger-Themen 2
H Felder mit unterschiedl. Typen sortieren Java Basics - Anfänger-Themen 5
T genericsdeklaration - Typen einschränken Java Basics - Anfänger-Themen 17
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
alderwaran überladene methoden mit allen möglichen typen aufrufen Java Basics - Anfänger-Themen 3
F Datentypen Zuweisungsproblem bei parametrisierten Typen mit/ohne Wildcards Java Basics - Anfänger-Themen 3
X eigener Mergesort auf generischen Typen mit Comparator Java Basics - Anfänger-Themen 6
D Datentypen mehrdimensionales Array meherer Typen möglich ? Java Basics - Anfänger-Themen 6
R Array eines neuen Typen erstellen und befüllen Java Basics - Anfänger-Themen 2
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
T mit Typen Date rechnen Java Basics - Anfänger-Themen 6
G Mehrere Typen in einer Datei Java Basics - Anfänger-Themen 5
T Vergleich von generischen Typen Java Basics - Anfänger-Themen 2
M List mit typen füllen Java Basics - Anfänger-Themen 5
J Datei aus unterschiedlichen Typen auslesen Java Basics - Anfänger-Themen 6
G Problem mit Variablen-Typen Java Basics - Anfänger-Themen 3
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
W Typen Angaben bei Java 1.5 Java Basics - Anfänger-Themen 8
T Rückgabewerte verschiedener Typen Java Basics - Anfänger-Themen 3
A Array mit generischen Typen casten? Java Basics - Anfänger-Themen 6
C Globale Variablen und Array mit verschiedenen Typen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben