Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe

T

theqwe

Aktives Mitglied
Hallo Community,

ich gehe gerade eine Klausuraufgabe durch und versuche sie umzusetzen. Einiges habe ich schon geschafft, aber jetzt hänge ich bei der Ausgabe fest.
Die Aufgabe ist wie folgt:
Ergänzen Sie die folgenden Klassen EBus, Pkw und Lkw um geeignete Methoden und maxi-
mal zwei Attribute pro Klasse, so dass
- ein EBus keinen Treibstoff (null) tankt und einen Verbrauch von 0 Litern pro 100 km be-
sitzt,
- ein Pkw stets „Benzin“ tankt und einen Verbrauch von 5 Litern pro 100 km besitzt und
- ein Lkw stets „Diesel“ tankt und einen Verbrauch von 25 Litern pro 100 km besitzt.
Die Anzahl der Personen in einem Bus und einem Pkw ist jeweils bei der Erstellung von Ob-
jekten dieser Klassen im Konstruktor anzugeben. Ein Lkw besitzt immer genau 2 Personen.

Ein Aufruf der main-Methode der Klasse Fahrzeug soll hierbei folgende Ausgabe erzeugen:

Lkw 1 tankt Diesel für 2 Personen, 4.0
Lkw 2 tankt Diesel für 2 Personen, 4.0
Ein EBus tankt null für 41 Personen, 0.0
Noch ein EBus tankt null für 39 Personen, 0.0
Noch ein EBus tankt null für 41 Personen, 0.0
Der Pkw tankt Benzin für 5 Personen, 20.0

Die Klasse Fahrzeug dürfen wir nicht mehr ändern.

Die Klassen für Lkw, EBus und Pkw sehen bei mir so aus:

Java:
package klausurTestPaket;

public class Lkw extends Fahrzeug {
   
    int lkwAnzahl = 0;

    public Lkw() {
       
        super(2, "Diesel");
        lkwAnzahl++;
    }

    @Override
    public double berechneVerbrauchPro100Km() {
       
        return 25;
    }
   
    public String toString() {
       
        return "Lkw " + this.lkwAnzahl + " tankt Diesel für 2 Personen, ";
    }
}
Java:
package klausurTestPaket;

public class EBus extends Fahrzeug {

    public EBus(int anzPersonen) {
       
        super(anzPersonen, null);
    }

    @Override
    public double berechneVerbrauchPro100Km() {
       
        return 0;
    }
}
Java:
package klausurTestPaket;

public class Pkw extends Fahrzeug {

    public Pkw(int anzPersonen) {
       
        super(anzPersonen, "Benzin");
    }

    @Override
    public double berechneVerbrauchPro100Km() {
       
        return 0;
    }
   
    public String toString() {
       
        return "Der Pkw tankt Benzin für" +;
    }
}

Java:
package klausurTestPaket;

public abstract class Fahrzeug {

    private int anzPersonen;
    private String treibstoffArt;

    public Fahrzeug(int anzPersonen, String treibstoffArt) {

        this.anzPersonen = anzPersonen;
        this.treibstoffArt = treibstoffArt;
    }

    public abstract double berechneVerbrauchPro100Km();

    protected double kmProLiter() {
        
        return 100 / berechneVerbrauchPro100Km();
    }

    public String toString() {
        
        return "tankt " + treibstoffArt + " für " + anzPersonen + " Personen, ";
    }

    public static void main(String[] args) {
        
        Lkw brummiA = new Lkw();
        Lkw brummiB = new Lkw();
        EBus oekoA = new EBus(41);
        EBus oekoB = new EBus(39);
        EBus oekoC = new EBus(41);
        Pkw taxi = new Pkw(5);

        System.out.println("" + brummiA + brummiA.kmProLiter());
        System.out.println("" + brummiB + brummiB.kmProLiter());
        System.out.println("" + oekoA + oekoA.kmProLiter());
        System.out.println("" + oekoB + oekoB.kmProLiter());
        System.out.println("" + oekoC + oekoC.kmProLiter());
        System.out.println("" + taxi + taxi.kmProLiter());
    }
}

Ich kriege die Ausgabe wie angewiesen nicht ausgegeben. Wie ist das ganze weiter realisierbar?
 
F

fhoffmann

Top Contributor
Folgende Methode von Fahrzeug führt zu einer Division duch 0, wenn der EBus in berechneVerbrauchPro100Km() 0 zurückgibt:
Code:
    protected double kmProLiter() {
        return 100 / berechneVerbrauchPro100Km();
    }
 
temi

temi

Top Contributor
Du musst der jeweiligen Instanz bei der Erzeugung einen Namen (Attribut) geben. Bei LKW ist es z.B. der String "LKW" + die Anzahl der Instanzen. Innerhalb der Klasse musst du dir dafür in einer statischen Variable merken, wieviele Instanzen bereits erzeugt wurden.
 
T

theqwe

Aktives Mitglied
Folgende Methode von Fahrzeug führt zu einer Division duch 0, wenn der EBus in berechneVerbrauchPro100Km() 0 zurückgibt:
Code:
    protected double kmProLiter() {
        return 100 / berechneVerbrauchPro100Km();
    }

Warum kriege ich aber keinen Fehler? Das Programm läuft ganz normal ohne Exception.


Du musst der jeweiligen Instanz bei der Erzeugung einen Namen (Attribut) geben. Bei LKW ist es z.B. der String "LKW" + die Anzahl der Instanzen. Innerhalb der Klasse musst du dir dafür in einer statischen Variable merken, wieviele Instanzen bereits erzeugt wurden.

Ich habe das wie folgt umgesetzt:

Java:
static int lkwAnzahl = 1;
static String lkw = "Lkw " + lkwAnzahl++;

Wie kriege ich das denn hin, das vor der Ausgabe auch "Lkw 1" und "Lkw 2" steht? toString in der jeweiligen Klasse würde das ganze überschreiben. Problematisch ist auch auch "Ein EBus..." "noch ein EBus...".
 
T

theqwe

Aktives Mitglied
[CODE"Java"]
package klausurTestPaket;

public class Lkw extends Fahrzeug {

static int lkwAnzahl = 1;

public Lkw() {

super(2, "Diesel");
}

@Override
public double berechneVerbrauchPro100Km() {

return 25;
}

public String toString() {

return "Lkw " + lkwAnzahl++ + " tankt Diesel für 2 Personen, ";
}
}
[/CODE]
[CODE"Java"]
package klausurTestPaket;

public class Pkw extends Fahrzeug {

int anzahlPersonen = 0;
static String treibstoffArt = "Benzin";

public Pkw(int anzPersonen) {

super(anzPersonen, treibstoffArt);
this.anzahlPersonen = anzPersonen;
}

@Override
public double berechneVerbrauchPro100Km() {

return 5;
}

public String toString() {

return "Der Pkw tankt " + treibstoffArt + " für " + anzahlPersonen + " Personen, ";
}
}
[/CODE]
Java:
package klausurTestPaket;

public class EBus extends Fahrzeug { 

    static int ebusAnzahl = 1;
    int anzahlPersonen = 0;
    
    public EBus(int anzPersonen) {
        
        super(anzPersonen, null);
        this.anzahlPersonen = anzPersonen;
        
    }

    @Override
    public double berechneVerbrauchPro100Km() {
        
        return 0;
    }
    
    @Override
    protected double kmProLiter() {
        
        return 0;    
    }
    
    public String toString() {
        
        if(ebusAnzahl == 1) {
            
            ebusAnzahl++;
            return "Ein EBus tankt null für " + anzahlPersonen + " Personen, ";
        }
        
        return "Noch ein EBus tankt null für " + anzahlPersonen + " Personen, ";
    }
}

So funktioniert der Code jetzt. Das Problem ist, da wir nur maximal 2 Attribute pro Klasse benutzen dürfen, kann ich in den Klassen EBus und Lkw nur Diesel und null im Sting ausgeben und nicht variabel. Ist das so gewollt oder gibt es eine andere Möglichkeit?
 
temi

temi

Top Contributor
Warum erhöht denn die toString() von EBus die Anzahl der erzeugten Instanzen? Das ist falsch!

Edit: Du benötigst bei Lkw eine statische Variable, die hochzählt, wenn eine neue Instanz der Klasse erzeugt wird und eine zweite Variable, die für die gerade erzeugte Instanz deren "Nummer" merkt. Bei EBus, reicht die statische Variable aus, weil du nur wissen musst, ob mehr als eine Instanz erzeugt wurde.
 
Zuletzt bearbeitet:
temi

temi

Top Contributor
kann ich in den Klassen EBus und Lkw nur Diesel und null im Sting ausgeben und nicht variabel.
Häh? Verstehe ich nicht. Die Treibstoffart gehört doch schon zu Fahrzeug. Nutz doch deren toString() Methode und ergänze nur am Anfang den Namen der Instanz, bzw. den entsprechenden Text (siehe EBus).
 
T

theqwe

Aktives Mitglied
Warum erhöht denn die toString() von EBus die Anzahl der erzeugten Instanzen? Das ist falsch!
Sorry, hatte das etwas doof beschrieben. Ich dachte, dass es irgendwie möglich ist, die toString Methode aus Fahrzeug zu benutzen. Die ist ja dort eigentlich total überflüssig oder?

Die toString aus Fahrzeug überlade ich doch mit denen aus den anderen Klassen und da ich max. 2 Attribute pro Klasse verwendet darf, kann ich die doch nicht in der jeweiligen toString Methode einsetzen.
 
temi

temi

Top Contributor
Ich dachte, dass es irgendwie möglich ist, die toString Methode aus Fahrzeug zu benutzen. Die ist ja dort eigentlich total überflüssig oder?

Natürlich kannst du die benutzen. Der Text entspricht doch dem, den du möchtest. Du musst nur am Anfang was ergänzen, z.B.
return "Der Pkw " + super.toString();
 
temi

temi

Top Contributor
und ohne neuen Attribute.

Für die beiden anderen Klassen brauchst du aber schon neue Attribute:

Du benötigst bei Lkw eine statische Variable, die hochzählt, wenn eine neue Instanz der Klasse erzeugt wird und eine zweite (nicht statische) Variable, die für die gerade erzeugte Instanz deren "Nummer" merkt. Bei EBus, reicht die statische Variable aus, weil du nur wissen musst, ob mehr als eine Instanz erzeugt wurde.
 
T

theqwe

Aktives Mitglied
Die beiden habe ich drin.

Java:
//Bei Lkw:
static int lkwAnzahl = 1;
//andere Code hier
public String toString() {
       
    return "Lkw " + lkwAnzahl++ + " " + super.toString();
}

//Bei EBus:
static int ebusAnzahl = 1;
//andere Code hier
public String toString() {
       
    if(ebusAnzahl == 1) {
       
        ebusAnzahl++;
        return "Ein EBus " + super.toString();
    }
       
    return "Noch ein EBus " + super.toString();
}

Ich weiß nicht, ob das sinnvoll ist. Über den Konstruktor hatte das nicht funtkioniert.
 
temi

temi

Top Contributor
Bei Lkw ungefähr so:
Java:
private static int count = 0;
private int current;

// im Konstruktor

current = count++;
 
T

theqwe

Aktives Mitglied
Wenn ich jetzt richtig verstehe, soll die Klasse Lkw eine statische Variable und eine Objektvariable erhalten. Die Objektvariable ist dafür da, jedes mal erhöht zu werden, sobald ein neues Objekt Lkw erzeugt wird und diese soll dann in der statischen Variable (Klassenvariable?) "kopiert" werden, damit ich sie in der toString Methode nutzen kann.
Habe ich das richtig verstanden und auch formuliert?
 
temi

temi

Top Contributor
Wenn ich jetzt richtig verstehe, soll die Klasse Lkw eine statische Variable und eine Objektvariable erhalten. Die Objektvariable ist dafür da, jedes mal erhöht zu werden, sobald ein neues Objekt Lkw erzeugt wird und diese soll dann in der statischen Variable (Klassenvariable?) "kopiert" werden, damit ich sie in der toString Methode nutzen kann.
Habe ich das richtig verstanden und auch formuliert?
Eher umgekehrt: Die Klassenvariable (static) wird um eins erhöht, jedesmal, wenn eine neue Instanz der Klasse erzeugt wird. In der Instanzvariablen (oder Objektvariablen) wird für jede Instanz gespeichert, welche Nummer sie hat. Die erste erzeugte Instanz hat die Nummer 1, die zweite die 2, usw. Daraus kannst du dann den Namen für die Ausgabe erzeugen Lkw + Nummer.

Bei deiner Lösung wird bei jeder Ausgabe über toString() der Zähler erhöht, aber dass ist falsch. Jeder Aufruf der ersten erzeugten Instanz soll ja die Ausgabe "Lkw 1..." liefern, egal wir oft du den aufrufst.
 
temi

temi

Top Contributor
Bei EBus, reicht die statische Variable aus, weil du nur wissen musst, ob mehr als eine Instanz erzeugt wurde.

Ich merke gerade, dass das natürlich Quatsch ist! Vergiss es sofort!

Es funktioniert genau wie bei Lkw, denn die erste erzeugte Instanz muss natürlich wissen, dass sie die Nummer 1 ist und alle anderen, dass sie es nicht sind.
 
T

theqwe

Aktives Mitglied
Super, das Programm läuft jetzt und ich habe alles verstanden.

Vielen Dank für die Unterstützung
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
S write(), weshalb verschiedene Ausgaben? Java Basics - Anfänger-Themen 4
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7
C verschiedene Label auf Knopfdruck abrufen Java Basics - Anfänger-Themen 4
L Verschiedene Fonts für verschiedene Dialogelemente Java Basics - Anfänger-Themen 2
G Verschiedene Packages Java Basics - Anfänger-Themen 3
G Daten in verschiedene Listen schreiben Java Basics - Anfänger-Themen 5
C Zustandsanzeige durch verschiedene Klassen Java Basics - Anfänger-Themen 4
S verschiedene Versionen Java Basics - Anfänger-Themen 2
G Verschiedene Exceptions zu gleichem Block Java Basics - Anfänger-Themen 6
T verschiedene Anfängerfragen Java Basics - Anfänger-Themen 20
J Verschiedene Ausgaben bei gleichen Ausdrücken (Typecasting?) Java Basics - Anfänger-Themen 5
N Verschiedene Input/Output Klassen Java Basics - Anfänger-Themen 3
G verschiedene datentypen in arraylist Java Basics - Anfänger-Themen 14
L verschiedene JPanel-Instanzen erstellen Java Basics - Anfänger-Themen 8
L 2 verschiedene Typen in einer Tabelle ablegen Java Basics - Anfänger-Themen 18
N Problem mit Tastatureingaben für verschiedene Datentypen Java Basics - Anfänger-Themen 3
L verschiedene formuare in einem fenster öffnen Java Basics - Anfänger-Themen 8
I Array für verschiedene Datentypen? Java Basics - Anfänger-Themen 5
R verschiedene dateitypen öffnen Java Basics - Anfänger-Themen 5
L verschiedene zeichen einlesen Java Basics - Anfänger-Themen 5
C 2 verschiedene Tables = 2 verschiedene Renderer ? Java Basics - Anfänger-Themen 5
S mit Buttons verschiedene Bilder laden Java Basics - Anfänger-Themen 4
S klassen in verschiedene Dateien Java Basics - Anfänger-Themen 5
3 Verschiedene Fragen (bin neu hier) Java Basics - Anfänger-Themen 5
G Verschiedene Datentypen in Vector packen und zurück Java Basics - Anfänger-Themen 3
M if oder verschiedene getter Java Basics - Anfänger-Themen 31
T befehle unterschiedlicher anzahl an strings wiedergeben Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
W Konvertierung und Vergleich unterschiedlicher Zeitformate Java Basics - Anfänger-Themen 11
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
D (zwei) Fenster mit unterschiedlicher Befüllung Java Basics - Anfänger-Themen 11
B Variablen Mehrere Zahlen mit unterschiedlicher Wahrscheinlichkeit mit Random auswählen Java Basics - Anfänger-Themen 17
M OOP Methode überschreiben mit String-Paramter unterschiedlicher Größe? Java Basics - Anfänger-Themen 19
Z Methoden Funktionspointer mit unterschiedlicher Signatur Java Basics - Anfänger-Themen 4
M Unterklassen mit unterschiedlicher Zustandsanzahl Java Basics - Anfänger-Themen 15
M Textdatei mit unterschiedlicher Spaltenanzahl einlesen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben