Vererbung, Konstruktor erweitern

Tearchen

Mitglied
Moin, hab ne Frage zu ner Übungsaufgabe die ich im Netz gefunden hab.
Ich hab ne Klasse Auto die an Klasse Pkw vererbt wird, get und set Methoden schreiben und den Konstruktor erweitern.

Java:
class Auto{
	String typ;
	int ps;
	
	public Auto(String typ, int ps){
		this.typ = typ;
		this.ps = ps;
	}
	
	public int getPS(){
		return ps;
	}
	
	public void setPs(int ps){
		this.ps = ps;
	}
	
	public String getTyp(){
		return typ;
	}
	
	public void setTyp(String typ){
		this.typ = typ;
	}
}

Java:
class Pkw extends Auto{
	private int insassen;
	
	public Pkw(String typ, int ps, int insassen){
		super(typ, ps);
		this.insassen = insassen;
	}
	
	public int getInsassen(){
		return insassen;
	}
	
	public void setInsassen(int insassen){
		this.insassen = insassen;
	}
}


public class Aufgabe22{
	public static void main(String[] args){
		
		Auto[] kfz = new Auto[5];
		
		kfz[0] = new Auto("MAN", 220);
		kfz[1] = new Auto("Mercedes", 90);
		kfz[2] = new Pkw("Touran", 140, 6);
		kfz[3] = new Pkw("Polo", 60, 4);
		kfz[4] = new Pkw("BMW", 105, 5);
		
		for(int i = 0; i < kfz.length; i++){
			System.out.println("Auto: " + kfz[i].getTyp() + ", " + kfz[i].getPS());
		}
	}
}

So gibt er mir aus :

Auto: MAN, 220
Auto: Mercedes, 90
Auto: Touran, 140
Auto: Polo, 60
Auto: BMW, 105


Wieso kann ich mit

Java:
for(int i = 0; i < kfz.length; i++){
System.out.println("Auto: " + kfz[i].getTyp() + ", " + kfz[i].getPS() + ", " + kfz[i].getInsassen());

oder

Java:
System.out.println("Pkw: " + kfz[2].getTyp() + ", " + kfz[2].getPS() + ", " + kfz[2].getInsassen());

nicht die Insassen ausgeben lassen ?
 
Was für Objekte sind denn im kfz-Array?
Sind dort wirklich nur PKW-Instanzen vorhanden?

edit: Ich sehe gerade
Java:
        kfz[0] = new Auto("MAN", 220);
        kfz[1] = new Auto("Mercedes", 90);

Da Auto keine Methode getInsassen bereit stellt, kann diese Methode auch nicht aufgerufen werden.
 
[Java]
for(int i = 0; i < kfz.length; i++){
System.out.print("Auto: " + kfz.getTyp() + ", " + kfz.getPS());
if(kfz instanceof Pkw) {
System.out.println(", " + ((Pkw)kfz).getInsassen());
}
else {
System.out.println(", falsches Objekt");
}
}
[/Java]

Da "Auto" keine Insassen hat, kann es diese auch nicht ausgeben... erst prüfen was für ein Object es ist... und dann casten


Code:
Auto: MAN, 220, falsches Objekt
Auto: Mercedes, 90, falsches Objekt
Auto: Touran, 140, 6
Auto: Polo, 60, 4
Auto: BMW, 105, 5
 
Zuletzt bearbeitet:
Ahhh...danke.
Ich dachte da Auto ja keine Insassen hat gibt er die einfach nicht aus und dat läuft dann trotzdem.

Weil Pkw erbt ja von Auto.
 
Zuletzt bearbeitet:
Ahhh...danke.
Ich dachte da Auto ja keine Insassen hat gibt er die einfach nicht aus und dat läuft dann trotzdem.

Weil Pkw erbt ja von Auto.

Richtig, aber dein Program weiß nicht das es ein Pkw ist. Es behandelt alles als Auto. Und Auto hat keine Insassen.

In Java kannst du NIE eine Methode aufrufen die es nicht gibt. Das wird IMMER in einer Exception enden. Bzw. in einem Compiler fehler.
 

Neue Themen


Zurück
Oben