this.object in einer parameterlosen Methode verwenden

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.
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;
    }
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:
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;
}
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 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;
    }
}
 

httpdigest

Top Contributor
Lass die Subklassen doch eine Methode implementieren (in der Oberklasse als abstract deklariert), damit die Subklassen sagen können, was sie sind:
Java:
abstract class Fahrzeug {
  ...
  protected abstract String wasBinIch();
  ...
  public void allInfosAboutTHISFahrzeug (){
    System.out.println(
      ...
      " ist ein " + wasBinIch() +
      ...);
  }
}
class Auto {
  protected String wasBinIch() { return "Auto"; }
}


Alternativ kannst du auch `this.getClass().getSimpleName()` nehmen.
 
Zuletzt bearbeitet:
Lass die Subklassen doch eine Methode implementieren (in der Oberklasse als abstract deklariert), damit die Subklassen sagen können, was sie sind:
Java:
abstract class Fahrzeug {
  ...
  protected abstract String wasBinIch();
  ...
  public void allInfosAboutTHISFahrzeug (){
    System.out.println(
      ...
      " ist ein " + wasBinIch() +
      ...);
  }
}
class Auto {
  protected String wasBinIch() { return "Auto"; }
}


Alternativ kannst du auch `this.getClass().getSimpleName()` nehmen.
@httpdigest
Danke schon mal. Ich teste das später noch aus, jetzt schliesst die Biblio ;-)
 
Lass die Subklassen doch eine Methode implementieren (in der Oberklasse als abstract deklariert), damit die Subklassen sagen können, was sie sind:
Java:
abstract class Fahrzeug {
  ...
  protected abstract String wasBinIch();
  ...
  public void allInfosAboutTHISFahrzeug (){
    System.out.println(
      ...
      " ist ein " + wasBinIch() +
      ...);
  }
}
class Auto {
  protected String wasBinIch() { return "Auto"; }
}


Alternativ kannst du auch `this.getClass().getSimpleName()` nehmen.
Ich habe den einfachen Weg mir `this.getClass().getSimpleName()` gewählt, das klappt gut.

Hier der entsprechende Code, Zeile 84 (das Programm ist in der Zwischenzeit umfangreicher geworden):
Java:
import java.util.*;

public class kapitel13a3 {
    public static void main(String[] args) {
        Auto a1  = new Auto("Audi", "quattro", 12500, 4, 150, 210, 60, 4, 5);
        LKW l1 = new LKW("Iveco", "longliner", 360000, 8, 300, 90, 250, 11, 30);
        a1.allInfosAboutTHISFahrzeug();
        l1.allInfosAboutTHISFahrzeug();
        askUserForNextOperation ();
        System.out.println("Ende des Programms");
    }

    public static void askUserForNextOperation () {
        Scanner askUserForNextOperation = new Scanner(System.in);
        int input=99;

        do {
            System.out.println("\nWillst du eine Funktion dieses Programms nutzen? Ja= 1, Nein=2");
            input = askUserForNextOperation.nextInt();
            if (input==1){
                proposeOptionstoUser();
            } if (input==2){
                System.out.println("Gut, dann geht's zum folgenden Programmschritt.");
            }
        } while ((checkUserInput(2, input))==false);
    }

    public static void proposeOptionstoUser () {
        Scanner proposeOptionstoUser = new Scanner (System.in);
        int input=99;
        do {
            System.out.println
            ("\nWillst du\n1: tanken\n2: fahren\n3: ein neues Fahrzeug generieren?");
            input = proposeOptionstoUser.nextInt();
            System.out.println();
            if (input==1){
                System.out.println("Tanken wird gestartet");
                //tanken (); //geht nicht weil ich gerade in einer statischen Methode bin
            }
            if (input==2) {
                System.out.println("Fahren wird gestartet");
                //fahren (); //geht nicht weil ich gerade in einer statischen Methode bin

            }
            if (input==3) {
                System.out.println("Generieren wird gestartet");
                //fahrzeugGenerieren (); //geht nicht weil ich gerade in einer statischen Methode bin
            }
        }
        while ((checkUserInput(3, input))==false);
        askUserForNextOperation();
    }

    //Hier wird geprüft, ob die User-Eingabe mit den Anzahl Optionen übereinstimmt
    public static boolean checkUserInput (int numberOfOptions, int userChoice){
        boolean userInputPossible;
        if (userChoice< (numberOfOptions+1)) {
            if (userChoice>0){
                userInputPossible = true;
            } else {
                System.out.println("Der eingebene Wert ist ungueltig.");
                userInputPossible = false;
            }
        } else {
            System.out.println("Der eingebene Wert ist ungueltig.");
            userInputPossible = false;
        }
        return userInputPossible;
    }
}

abstract class Fahrzeug{
    String marke, modell;
    double preis;
    int anzahlRaeder;

    public void fahren () {}

    public void allInfosAboutTHISFahrzeug (){
        System.out.println(
        "\nDas Modell "+modell+
        " der Marke "+marke+
        //Hier soll die Methode aufgerufen werden, die den ClassType bestimmt.
        " ist ein "+this.getClass().getSimpleName()+
        ".\nEs kostet "+preis+" Franken und hat "+anzahlRaeder+" Raeder.");
    }

    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;
    double verbrauchPro100k, Reichweite, aktuellerTankstand, tankSize;
    final double preisProLiterBenzin = 1.55;

    public double berechneKostenfuersVolltanken (){
        if (aktuellerTankstand>tankSize){
            System.out.println("Es kann nicht mehr Benzin im Tank sein als dessen Fassungsvermoegen.\nNaja, ich ignoriere das mal.");
        }
        return (tankSize-aktuellerTankstand)*preisProLiterBenzin;
    }

    public Benziner(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
            double tankSize, double verbrauchPro100k) {
        super(marke, modell, preis, anzahlRaeder);
        this.ps = ps;
        this.maxGeschwindigkeit = maxGeschwindigkeit;
        this.tankSize = tankSize;
        this.verbrauchPro100k = verbrauchPro100k;
        Reichweite = berechneReichweite();
    }

    public void allInfosAboutTHISFahrzeug (){
        super.allInfosAboutTHISFahrzeug();
        System.out.println("Dieses Fahrzeug hat eine maximale Geschwindigkeit von "+maxGeschwindigkeit+
        " kmh und eine Leistung von "+ps+" PS.\nSein Tank fasst "+tankSize+
        " Liter, damit kann es bei einem Verbrauch von "+verbrauchPro100k+
        " L/100km "+Reichweite+
        " km weit fahren."
        );
    }

    public double berechneReichweite (){
        return Math.rint(((tankSize/verbrauchPro100k)*100));
    }


}

class Auto extends Benziner {
    int maxPassagiere;

    public Auto(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
            double tankSize, double verbrauchPro100k, int maxPassagiere) {
        super(marke, modell, preis, anzahlRaeder, ps, maxGeschwindigkeit, tankSize, verbrauchPro100k);
        this.maxPassagiere = maxPassagiere;
    }

    public void allInfosAboutTHISFahrzeug (){
        super.allInfosAboutTHISFahrzeug();
        System.out.println("Maximal "+maxPassagiere+" Passagiere passen in dieses Auto.");
    }
}

class LKW extends Benziner {
    int maxLadung;

    public LKW(String marke, String modell, double preis, int anzahlRaeder, int ps, int maxGeschwindigkeit,
            double tankSize, double verbrauchPro100k, int maxLadung) {
        super(marke, modell, preis, anzahlRaeder, ps, maxGeschwindigkeit, tankSize, verbrauchPro100k);
        this.maxLadung = maxLadung;
    }

    public void allInfosAboutTHISFahrzeug (){
        super.allInfosAboutTHISFahrzeug();
        System.out.println("Dieser LKW kann "+maxLadung+" Tonnen laden.");
    }
}

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;
    }
}

Danke an alle, ich weiss Eure Hilfe zu schätzen!

PS: Ich hab' zum gleichen Programm noch eine neue Frage gestellt. Das es um was anderes geht, hab' ich einen neuen thread aufgemacht. Gebt Bescheid, falls das besser hier rein soll.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
"java.util.HashMap.get(Object)" is null Java Basics - Anfänger-Themen 10
H What is the Life Cycle of an Object Created Within/Outside of a Servlet? Will that item be destroyed after the session ends? Java Basics - Anfänger-Themen 1
HolyFUT JSON String in Java Object schreiben - Anführungszeichen rauskriegen? Java Basics - Anfänger-Themen 17
thobren Object[][] Java Basics - Anfänger-Themen 8
R Compiler-Fehler JTable mit XML befüllen | The constructor JTable(Object[], String[]) is undefined Java Basics - Anfänger-Themen 10
B JaxB - Property vom Typ Object und LocalDateTime speichern? Java Basics - Anfänger-Themen 0
S Arraylist<Object> mit verschiedenen Objects ausgeben Java Basics - Anfänger-Themen 3
N extends und super vs new object Java Basics - Anfänger-Themen 4
I JaxB und Klasse "Object" ? Java Basics - Anfänger-Themen 7
D Klassen undefined for the type 'object' Java Basics - Anfänger-Themen 2
B JaxB - speichern vom Typ "Object" Java Basics - Anfänger-Themen 8
P Variablen HttpResponse.getBody() wird automatisch org.json Object und kann nicht zu json.simple Object gecastet werden? Java Basics - Anfänger-Themen 7
M Java Klasse Object Java Basics - Anfänger-Themen 5
G Java Object value und entity? Java Basics - Anfänger-Themen 2
S Generics-Problem: Class, Class<?>, Class<Object> Java Basics - Anfänger-Themen 4
I Object-Oriented Programming, Objekt erzeugen Java Basics - Anfänger-Themen 1
P Zugreifen auf Object[] Java Basics - Anfänger-Themen 4
B if(object== null) abkürzen? Java Basics - Anfänger-Themen 6
A Object to Map Java Basics - Anfänger-Themen 2
D Object in ArrayList ausgeben Java Basics - Anfänger-Themen 24
L Input/Output Datei Object aus resources Java Basics - Anfänger-Themen 1
T HashSet in List-Object Java Basics - Anfänger-Themen 5
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
T Object zu Char zu String Java Basics - Anfänger-Themen 6
Yamie ArrayList<Object> als Liste von Strings ausgeben? Java Basics - Anfänger-Themen 15
F Methoden Object.clone() Java Basics - Anfänger-Themen 1
A Probleme beim Methodenaufruf von Object[] ! Java Basics - Anfänger-Themen 12
J Methoden Doppelt verkettete Liste remove(Object) Java Basics - Anfänger-Themen 8
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
A JavaScript Object Notation einbinden mittels Maven Java Basics - Anfänger-Themen 7
F Unique Object Java Basics - Anfänger-Themen 3
GreyFox Object dynamisch mit werten versehen. Java Basics - Anfänger-Themen 4
R The method printf(String, Object[]) in the type printStrem in not applicable for the arguments ... Java Basics - Anfänger-Themen 3
Z Object Kreis am Frame abprallen lassen! Java Basics - Anfänger-Themen 12
O Object Java Basics - Anfänger-Themen 4
O nullpointerExce. Gui Object weitergabe Java Basics - Anfänger-Themen 12
P Variablen generic type variablen in object array Java Basics - Anfänger-Themen 1
K Selbst renderndes Object auf null setzen Java Basics - Anfänger-Themen 1
K Methoden Probleme mit LinkedList.remove(object) Java Basics - Anfänger-Themen 1
J Object bestimmter Klasse Java Basics - Anfänger-Themen 3
F Object mit zwei Entities Java Basics - Anfänger-Themen 3
B Map, basic types & Object Java Basics - Anfänger-Themen 5
P Auf Object in Array Methode anwanden Java Basics - Anfänger-Themen 2
S Object Array Length via Konstruktor Java Basics - Anfänger-Themen 5
B Date Object mit Millisekunden Ausgabe Java Basics - Anfänger-Themen 8
V Object in double? Java Basics - Anfänger-Themen 3
B Object in Array nach Prüfung löschen Java Basics - Anfänger-Themen 13
N Object mit String ansprechen Java Basics - Anfänger-Themen 7
A Applet mit Object-Tags einbinden. Java Basics - Anfänger-Themen 3
A If object != null funktioniert nicht Java Basics - Anfänger-Themen 2
B func(Object ....args) korrekt weitergeben Java Basics - Anfänger-Themen 4
M Object people[][] Daten hinzufügen Java Basics - Anfänger-Themen 3
T Input/Output Object Streams Java Basics - Anfänger-Themen 6
T Object[][] to String[][] Java Basics - Anfänger-Themen 8
T Object in Array Java Basics - Anfänger-Themen 3
T HashMap<String,Object> Werte auslesen Java Basics - Anfänger-Themen 5
H Object an methode Java Basics - Anfänger-Themen 4
D Object -> String Java Basics - Anfänger-Themen 6
W Compiler-Fehler "Could not reserve enough space for object heap"... und dann raucht das Programm ab Java Basics - Anfänger-Themen 3
D Datentyp Object Java Basics - Anfänger-Themen 2
B Object "Method" in TreeSet, Fehler beim Vergleichen/Comparable Java Basics - Anfänger-Themen 9
L Datentypen Object zu double zu int konvertieren Java Basics - Anfänger-Themen 6
M String to Object Java Basics - Anfänger-Themen 15
S Object Initialisierung Java Basics - Anfänger-Themen 7
H Object in einem .jar-File einlesen Java Basics - Anfänger-Themen 3
D Object oder Primitiv Java Basics - Anfänger-Themen 10
E Object in eigene Klasse umwandeln? Java Basics - Anfänger-Themen 7
W Main-method in Object-classes Java Basics - Anfänger-Themen 5
algebraiker TreeMap<Date,Object> navigieren? Java Basics - Anfänger-Themen 24
E Equals-Methode auf Class-Object Java Basics - Anfänger-Themen 17
C Typen aus List<Object[]> ändern Java Basics - Anfänger-Themen 7
C JComboBox setSelectedItem(Object) Problem Java Basics - Anfänger-Themen 5
B Methoden object = this; Java Basics - Anfänger-Themen 4
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
M Methode von einem Object überschreiben Java Basics - Anfänger-Themen 5
S Collections Aus Set<Object> bestimmte Typen entfernen Java Basics - Anfänger-Themen 3
M Variablen dynamisch variableninhalt von Object auslesen Java Basics - Anfänger-Themen 4
M Fehlermeldung: the method.... ist undefined for the type object Java Basics - Anfänger-Themen 6
R ArrayList(int index, Object) funktioniert nicht korrekt? Java Basics - Anfänger-Themen 7
C Bereits geöffnetes Object ermitteln Java Basics - Anfänger-Themen 5
N HashMap<String, Object> bei jre4 Java Basics - Anfänger-Themen 3
M object cast auf double Java Basics - Anfänger-Themen 2
K Datentypen Object in 2-dimensionales String Array zurückwandeln Java Basics - Anfänger-Themen 14
D Aus Object auslesen Java Basics - Anfänger-Themen 2
P Java Object das eine HTML Datei repräsentiert Java Basics - Anfänger-Themen 19
C mehrdimensionales Object sortieren Java Basics - Anfänger-Themen 4
T Aus object Array Double Werte ziehen Java Basics - Anfänger-Themen 10
T List.add(Object) führt zu NullPointerException Java Basics - Anfänger-Themen 14
F Wie kann ein Object[] zu Integer[] umwandeln? Java Basics - Anfänger-Themen 6
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
Ollek Collections ArrayList Object - Attribut von dem Object vergleichen Java Basics - Anfänger-Themen 7
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
B Object an Server senden, Server antwortet mit objekt? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben