Ich habe ein Programm mit verschiedenen Subklassen. In der Superklasse ist eine Methode "findClassType", die den Klassentyp als String ausgeben soll. Wenn das Objekt vom Typ "Fahrrad" ist, soll also der entsprechende String den Wert "Fahrrad" erhalten.
Ich habe versucht, das mit "X instanceof" zu lösen. Aber ich habe keinen eleganten Weg gefunden, das "X" zu parametrisieren. Mein Weg via "this.object" geht nicht (und sieht ehrlich gesagt schon beim Anschauen irgendwie falsch aus...).
Natürlich könnte ich die Methode um einen Parameter erweitern:
Aber dann müsste ich bei jedem Aufruf der Methode manuell das Objekt mitgeben. Und das wäre ja Doppelmoppel:
object.findClassType (object)
Einen Lösungsansatz habe ich nicht.
Ich vermute lediglich, dass es was mit statischer/dynamischer Typ zu tun hat.
Danke& Gruss,
MarkusFromBerne
Hier der Vollständigkeit halber der vollständige Code:
Java:
public String findClassType () {
String classType;
if (this.Fahrzeug instanceof Auto) {classType="Auto";};
if (this.Fahrzeug instanceof LKW) {classType="LKW";};
if (this.Fahrzeug instanceof Fahrrad) {classType="Fahrrad";}
else {classType="unbekannter Fahrzeugtyp";};
return classType;
}
Natürlich könnte ich die Methode um einen Parameter erweitern:
Java:
public String findClassType (Objekt obj) {
String classType;
if (obj instanceof Auto) {classType="Auto";};
if (obj instanceof LKW) {classType="LKW";};
if (obj instanceof Fahrrad) {classType="Fahrrad";}
else {classType="unbekannter Fahrzeugtyp";};
return classType;
}
object.findClassType (object)
Einen Lösungsansatz habe ich nicht.
Ich vermute lediglich, dass es was mit statischer/dynamischer Typ zu tun hat.
Danke& Gruss,
MarkusFromBerne
Hier der Vollständigkeit halber der vollständige Code:
Java:
public class Fahrzeuge {
public static void main(String[] args) {
}
}
abstract class Fahrzeug{
String marke, modell;
double preis;
int anzahlRaeder;
public void fahren () {}
public void allInfosAboutTHISFahrzeug (){
System.out.println(
"Das Modell "+modell+
" der Marke "+marke+
//Hier soll die Methode aufgerufen werden, die den ClassType bestimmt.
" ist ein "+findClassType()+
".\nEs kostet "+preis+" und hat "+anzahlRaeder+".");
}
//Hier ist die Methode, die den ClassType bestimmen soll
//Hier ist auch das beschriebene Problem.
public String findClassType ("Das will ich lieber leerlassen") {
String classType;
if (this.Fahrzeug instanceof Auto) {classType="Auto";};
if (this.Fahrzeug instanceof LKW) {classType="LKW";};
if (this.Fahrzeug instanceof Fahrrad) {classType="Fahrrad";}
else {classType="unbekannter Fahrzeugtyp";};
return classType;
}
public Fahrzeug(String marke, String modell, double preis, int anzahlRaeder) {
this.marke = marke;
this.modell = modell;
this.preis = preis;
this.anzahlRaeder = anzahlRaeder;
}
}
abstract class Benziner extends Fahrzeug{
int ps, maxGeschwindigkeit, tankSize, Reichweite;
double verbrauchPro100k;
final double preisProLiterBenzin = 1.55;
public double tanken (){
double kosten= 0;
return kosten;
}
public Benziner(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
int tankSize, int reichweite, double verbrauchPro100k) {
super(marke, modell, preis, anzahlRaeder);
this.ps = ps;
this.maxGeschwindigkeit = maxGeschwindigkeit;
this.tankSize = tankSize;
Reichweite = reichweite;
this.verbrauchPro100k = verbrauchPro100k;
}
}
class Auto extends Benziner {
int maxPassagiere;
public Auto(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
int tankSize, int reichweite, double verbrauchPro100k, int maxPassagiere) {
super(marke, modell, preis, anzahlRaeder, ps, maxGeschwindigkeit, tankSize, reichweite, verbrauchPro100k);
this.maxPassagiere = maxPassagiere;
}
}
class LKW extends Benziner {
int maxLadung;
public LKW(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
int tankSize, int reichweite, double verbrauchPro100k, int maxLadung) {
super(marke, modell, preis, anzahlRaeder, ps, maxGeschwindigkeit, tankSize, reichweite, verbrauchPro100k);
this.maxLadung = maxLadung;
}
}
class Fahrrad extends Fahrzeug {
double kalorienverbrauchProKm, gewicht;
int anzahlGaenge;
public void essen () {}
public Fahrrad(String marke, String modell, double preis, int anzahlRaeder, double kalorienverbrauchProKm,
double gewicht, int anzahlGaenge) {
super(marke, modell, preis, anzahlRaeder);
this.kalorienverbrauchProKm = kalorienverbrauchProKm;
this.gewicht = gewicht;
this.anzahlGaenge = anzahlGaenge;
}
}