Vererbung Zugriff auf private Variable

JDownHD

Mitglied
Hallo,

ein Problem der kleineren Sorte, aber ich weiß mir nicht zu helfen:
Java:
class Bus{
	private String hersteller;
	private double gewicht;
	
	public Bus(String hersteller, double gewicht){
		setHersteller(hersteller);
		setGewicht(gewicht);
	}
	public Bus(){
	}
	
	public void setHersteller(String hersteller){
		this.hersteller = hersteller;
	}
	public void setGewicht (double gewicht){
		this.gewicht=gewicht;
	}
	public String getHersteller(){
		return hersteller;
	}
	public double getGewicht(){
		return gewicht;
	}
}
Java:
class Doppeldecker extends Bus{
	private boolean offen;
	
	public Doppeldecker(String hersteller, double gewicht, boolean offen){
		setHersteller(hersteller);
		setGewicht(gewicht);
		setOffen(offen);
	}
	
	public void setOffen(boolean offen){
		this.offen=offen;
	}
	public boolean getOffen(){
		return offen;
	}
	public void setGewicht(double gewicht){
		if(gewicht<0.5)
			gewicht=0;
		else if(gewicht>20)
			gewicht=1000;
		else
			gewicht=gewicht;
	}
	
	public void info(){
		System.out.println("Hersteller: "+getHersteller()+"\nGewicht: "+getGewicht()+"\nOffen: "+getOffen());
	}
}
Java:
class DoppeldeckerApp{
	public static void main(String args[]){
		Doppeldecker d1 = new Doppeldecker("BMW", 5.4, true);
	
		d1.info();
	}
}

Es geht alles, bis auf das Initialisieren des Gewichtes...
Code:
gewicht=gewicht
ist falsch, aber über
Code:
this.gewicht=gewicht
kann ich nicht zugreifen, weil gewicht in Auto private gesetzt ist. Über
Code:
setGewicht(gewicht)
an gleicher Stelle erzeuge ich eine "Endlosschleife"... wie kann ich gewicht setzen wenn ich die Überprüfung in Doppeldecker machen will?
 
Du brauchst Schnittstellen (Getter- und Settermethoden).

Die habe ich ja, Ich will nur in Doppeldecker eine Überprüfung bei der Eingabe von der Variable gewicht machen.
Java:
public void setGewicht(double gewicht){
		if(gewicht<0.5)
			gewicht=0;
		else if(gewicht>20)
			gewicht=1000;
		else
			gewicht=gewicht;
	}

Nur wird in diesem Fall das eingetragene Gewicht nicht gesetzt bzw. ausgegeben.
 
Probiere den Parameter gewicht in pGewicht zu benennen und kompiliere.

Java:
class Doppeldecker extends Bus{
	private boolean offen;
	
	public Doppeldecker(String hersteller, double pgewicht, boolean offen){
		setHersteller(hersteller);
		setGewicht(pgewicht);
		setOffen(offen);
	}
	
	public void setOffen(boolean offen){
		this.offen=offen;
	}
	public boolean getOffen(){
		return offen;
	}
	public void setGewicht(double pgewicht){
		if(pgewicht<0.5)
			pgewicht=0;
		else if(pgewicht>20)
			pgewicht=1000;
		else
			pgewicht=pgewicht;
	}
	
	public void info(){
		System.out.println("Hersteller: "+getHersteller()+"\nGewicht: "+getGewicht()+"\nOffen: "+getOffen());
	}
}
Java:
class DoppeldeckerApp{
	public static void main(String args[]){
		Doppeldecker d1 = new Doppeldecker("BMW", 5.4, true);
	
		d1.info();
	}
}

Immer noch Gewicht: 0.0 in der Ausgabe
 
nutze parent.setGewicht um an die Methode der Vaterklasse zu kommen, oder setze den Zugriffsmodifikator der Variable für das Gewicht auf "protected" damit Kindklassen zugriff haben.

E: Natürlich, "parent" ist bei PHP, bei Java ist es "super" 😀
 
Zuletzt bearbeitet:
Du musst mit super auf die Methode setGewicht der Mutterklasse zugreifen. So funktioniert es:

Java:
class Doppeldecker extends Bus{
  private boolean offen;
  
  public Doppeldecker(String hersteller, double pGewicht, boolean offen){
    setHersteller(hersteller);
    setGewicht(pGewicht);
    setOffen(offen);
  }
  
  public void setOffen(boolean offen){
    this.offen=offen;
  }
  public boolean getOffen(){
    return offen;
  }
  public void setGewicht(double pGewicht){
    if(pGewicht<0.5)
    super.setGewicht(0);
    else if(pGewicht>20)
    super.setGewicht(1000);
    else
    super.setGewicht(pGewicht);
  }
  
  public void info(){
    System.out.println("Hersteller: "+getHersteller()+"\nGewicht: "+getGewicht()+"\nOffen: "+getOffen());
  }
}
 
Du musst mit super auf die Methode setGewicht der Mutterklasse zugreifen. So funktioniert es:

Java:
class Doppeldecker extends Bus{
  private boolean offen;
  
  public Doppeldecker(String hersteller, double pGewicht, boolean offen){
    setHersteller(hersteller);
    setGewicht(pGewicht);
    setOffen(offen);
  }
  
  public void setOffen(boolean offen){
    this.offen=offen;
  }
  public boolean getOffen(){
    return offen;
  }
  public void setGewicht(double pGewicht){
    if(pGewicht<0.5)
    super.setGewicht(0);
    else if(pGewicht>20)
    super.setGewicht(1000);
    else
    super.setGewicht(pGewicht);
  }
  
  public void info(){
    System.out.println("Hersteller: "+getHersteller()+"\nGewicht: "+getGewicht()+"\nOffen: "+getOffen());
  }
}

Gut gut,
aber warum Funktioniert das mit dem pGewicht?
Das ist dann einfach nur die Variable welche nur innerhalb von Doppeldecker bzw setGewicht existiert?!
 
pGewicht ist der (Übergabe)parameter der Methode setGewicht. Diese Variable hat nur eine lokale Gültigkeit, existiert also nur in jener Methode.
 

Zurück
Oben