OOP

Superbyte

Mitglied
Hallo und guten Abend alle zusammen,

ich bin grade dabei meine Java Kenntnisse aufzufrischen und bin jetzt wieder bei OOP angekommen.
Ich drei Klassen geschrieben.

Die erste hier:
Java:
public class Main {

	public static void main(String[] args) {
		
		Auto a = new BMW("BMW", "M5","Rot",350);
		BMW bmw = (BMW) a;
		
		System.out.println(a.getMarke());
		System.out.println(a.getModell());
		System.out.println(a.getFarbe());
		System.out.println(bmw.getPS());
		
		System.out.println("\n");
		
		Auto b = new Auto("AUDI", "A5", "Blau");
		System.out.println(b.getMarke());
		System.out.println(b.getModell());
		System.out.println(b.getFarbe());
		
		

	}

}

Die zweite Klasse hier:

Java:
public class Auto {
	
	private String marke, modell, farbe;
	
	public Auto(String marke, String modell, String farbe){
		
		this.marke = marke;
		this.modell = modell;
		this.farbe = farbe;
		
	}
	

	public String getMarke(){
		
		return marke;
		
	}
	
	public String getModell(){
		
		return modell;
		
	}
	
	public String getFarbe(){
		
		return farbe;
		
	}

}

und die letzte hier:

Java:
public class BMW extends Auto{

	public int ps;
	public String marke, modell, farbe;
	
	
	public BMW(String marke, String modell, String farbe, int ps){
		super(marke, modell, farbe);
		this.ps = ps;
	}
	
	public String getMarke(){
		
		return marke;
		
	}
	
	public String getModell(){
		
		return modell;
		
	}
	
	public String getFarbe(){
		
		return farbe;
		
	}
	
	public int getPS(){
		
		return ps;
		
	}
	
	
	
}

Ich habe hier nur ein kleines Verständnis Problem.

Wenn ich die Main Methode jetzt starte bekomme ich 3 mal null Werte. Hier die Ausgabe:
null
null
null
350


AUDI
A5
Blau

Wenn ich aber aus dem private ein protected mache und dann mit dem Punktoperator auf die Attribute zugreife, dann bekomme ich die richtigen Werte.
Kann mir jemand erklären wo der Fehler von mir ist?
Ich hoffe das Problem ist hier klar.
 

Volvagia

Top Contributor
Du rufst den Konstruktor der Superklasse auf, überschreibst aber in BMW die Getter die ihre eigenen Variable zurückgeben die nie gesetzt werden.
 

Superbyte

Mitglied
Du rufst den Konstruktor der Superklasse auf, überschreibst aber in BMW die Getter die ihre eigenen Variable zurückgeben die nie gesetzt werden.

Vielen Dank. Jetzt habe ich es auch gesehen. Wie kann ich denn das Problem umgehen außer die Signatur der Methode zu verändern?

EDIT: Hat sich erledigt! Vielen Dank für deine Mühe!
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Gar nicht überschreiben.
Du hast die Methode ja schon in der Superklasse, da brauchst du sie nicht noch in eine Subklasse. (Außer du willst sie tatsächlich erweitern.)
 
H

hüteüberhüte

Gast
Also du würdest in BMW getMarke() usw. überschreiben. "Dinge" können überladen, überschreiben oder überdeckt / verdeckt sein.

Mach es doch so:
Java:
    public static void main(String[] args) {
        Auto a = new BMW("BMW", "M5", "Rot", 350);
        BMW bmw = (BMW) a;

        System.out.println(a.getMarke());
        System.out.println(a.getModell());
        System.out.println(a.getFarbe());
        System.out.println(bmw.getPS());

        System.out.print('\n');

        Auto b = new Auto("AUDI", "A5", "Blau");
        System.out.println(b.getMarke());
        System.out.println(b.getModell());
        System.out.println(b.getFarbe());
    }
Java:
public class Auto {

    private String marke, modell, farbe; // oder protected, wenn in Subclass darauf zugegriffen werden soll

    public Auto(String marke, String modell, String farbe) {
        this.marke = marke;
        this.modell = modell;
        this.farbe = farbe;
    }

    public String getMarke() {
        return marke;
    }

    public String getModell() {
        return modell;
    }

    public String getFarbe() {
        return farbe;
    }
}
Java:
public class BMW extends Auto {

    private int ps;

    public BMW(String marke, String modell, String farbe, int ps) {
        super(marke, modell, farbe);
        this.ps = ps;
    }

    public int getPS() {
        return ps;
    }
}

Grüße zur späten Stunde!
hütte
 

Oben