Problem mit toString Methode

AlexD

Aktives Mitglied
Hallo zusammen, ich habe gerade wohl eine kleine Blockade.

Die toString Methode liefert mir nicht das richtige Ergebnis, vielleicht kann mir mal einer auf die Sprünge helfen.

Danke im voraus!

Java:
package aufg2;

public class TestPerson {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Person m1 = new Mann(25,"Manfred",175,75);
		Person m2 = new Mann(22,"Alex",168,70);
		Person f1 = new Frau(31,"Marta",159,67);
	
		System.out.println(m1.toString());
		
		
	}

}

Java:
package aufg2;



public abstract class Person {

	public static int anzahlPerson;
	private final String name;
	int alter;
	int groesse;
	int gewicht;
	
	
	
	public Person(int a, String n, int groesse, int gewicht){
		this.alter = a;
		this.name = n;
		this.groesse = groesse;
		this.gewicht = gewicht;
		
		anzahlPerson++;
	}
	
	
	boolean istVolljaehrig(){
		return getAlter()>=volljaehrigkeit();
	}
	
	public String getName(){
		return this.name;
	} 
	
	public int getGewicht(){
		return this.gewicht;
	}
	
	public int getAlter(){
		return this.alter;
	}

	public int getGroesse(){
		return this.groesse;
	}
	
	public String toString(){
		return getName() + " " + getGewicht() + " " + getGroesse() + " " + getAlter()
				+ chromoson() + " " + preisHaarschnitt();
 	}
	
	public static int volljaehrigkeit(){
		return 18;
	}
	
	
	abstract String chromoson();
	abstract int preisHaarschnitt();
	
	
	
}

Java:
package aufg2;

public class Mann extends Person {

	
	
	final String CHROMOSON = "XY";
	public static int anzahlM;

		public Mann(int a, String n,int b,int c) {
		super(a, n, b, c);
		anzahlM++;
		
	}
		
		public static int anzahl (){
			return anzahlM;
		}
		
		// hier soll immer +5 addiert werden 
               // aber leider macht er das nicht 
	public int groesse(){
		return super.getGroesse() + 5;
	}

	public int gewicht(){
		return super.getGewicht();
	}
		

		@Override
		String chromoson() {
			// TODO Auto-generated method stub
			return this.CHROMOSON;
		}


		@Override
		int preisHaarschnitt() {
			// TODO Auto-generated method stub
			return (int)Math.round(15 + ((1.0/4)*getAlter()));
		}


		

}


Es geht um die getGroesse in der Klasse Mann!
 
Die Klasse Mann hat nur die Methode getGroesse, die aus der Basis-Klasse geerbt wird. Keine Ahnung, was du da nun tolles erwartest?!
 
Ach sorry, ich erwarte das auf das Ergebnis der Größe beim Mann 5 addiert wird.

Leider passiert das aber nicht :/

außer wenn Caste

[Java]
System.out.println(((Mann) m1).groesse());

System.out.println(((Frau)f1).gewicht());
[/code]
 
Zuletzt bearbeitet:
Warum sollte die Methode getGrösse von Mann aufgerufen werden wenn du ein Objekt der Klasse Person erzeugst?

Person a = new Mann()

Sollte eigentlich ein Warning erzeugen denn es ist sinnfrei.
 
Zuletzt bearbeitet:
Naja, folgender Code:

Java:
	public int getGroesse(){
		return this.groesse;
	}
 
	public String toString(){
		return getName() + " " + getGewicht() + " " + getGroesse() + " " + getAlter()
				+ chromoson() + " " + preisHaarschnitt();
 	}

Du rufst die toString-Methode auf, welche in Person vorhanden ist. Passt soweit, anschließend rufst du getGroesse() auf, jedoch gibt es getGroesse() nur in Person, und wird in deiner Mann-Klasse nicht überschrieben. Dementsprechend wird einfach die übergebene Größe zurückgegeben

Du musst die getGroesse-Methode in deiner spezielleren Mann-Klasse ebenfalls implementieren, sodass diese die "allgemeinere" getGroesse-Methode in deiner Person-Klasse überschreibt.

Dann funktioniert dein gewünschter Effekt, bzw. sollte funktionieren. 😉

EDIT: @Thallius: Weshalb soll hier eine Warnung angezeigt werden und warum soll es keinen Sinn machen, was der TO hier macht? Von der allgemeineren Klasse Person wird ein Objekt vom Typ Mann erstellt - passt doch?

cheers flo
 
Zuletzt bearbeitet:
Java:
Person a = new Mann()

Sollte eigentlich ein Warning erzeugen denn es ist sinnfrei.
Wieso macht das keinen Sinn?

Edit: Edit vom Vorposter nicht gesehen..
 
Zuletzt bearbeitet:

Zurück
Oben