Vererbung Objekte von Ober - und Unterklassen zählen

Saberon

Mitglied
Hallo zusammen, ich bin neu in diesem Forum und Informatikstudent im zweiten Semester. Mittlerweile hab ich die Basics endlich so einigermaßen drauf und kann mich endlich ans objektorientierte programmieren machen. Dazu gibt es natürlich einige Übungsaufgaben, die zu erledigen sind, bei einer komme ich aber nicht weiter bzw. hab ich keine Ahnung wie ich das genau angehen soll. So ungefähr hab ich eine vorstellung wie es geht, die exakte Umsetzung ist mir aber nicht gelungen.

Es geht in der Aufgabe darin, eine Gruppe von Personen ("Person" ist eine abstrakte Oberklasse von der "Mann" und "Frau" zwei Unterklassen dieser sind) zu modellieren, das hab ich auch ganz gut hinbekommen, im Grunde ist der Text soweit fertig, allerdings steht ganz am Ende der Übung folgende Aufgabe:

"[...] Erweitern sie die Klassendefinition dann so, dass gezählt wird, wie viele Personen, Frauen Männer erzeugt werden. Die Anzahl von Instanzen jeder dieser Klassen soll bei Aufruf der Methode "anzahl()" für Referenzen geliefert werden, deren statischer Typ der fraglichen Klasse entspricht"

Anders gesagt soll ich zählen, wie viele Personen erzeugt wurden. Das ist schön und gut, und hab ich ganz einfach hin bekommen, indem ich im Konstruktor von Person

Code:
anzahl++
hinzugefügt habe, außerdem hab ich folgende Methode in der Klasse Person geschrieben

Code:
//Anzahl raus geben
    public static int anzahl() {
    return anzahl;
    }


Bei meinen Tests stellte sich heraus, dass ich beim Methodenaufruf richtigerweise die Anzahl der erzeugten Personen zurück bekommen habe.

AAAAABER

Ich soll zusätzlich abfragen können, wie viele Männer/Frauen erzeugt wurden.

Bei 2 Männern und 3 Frauen soll wenn ich die Methode mit "Person.anzahl()" aufrufe 5 raus kommen, für Frau 3 und für Mann 2.

Ich hab aber keine Ahnung wie ich das realisiere. Verschiedenste Dinge wurden ausprobiert, so habe ich das ganze einfach noch mal in die Unterklassen "Frau" und "Mann" geschrieben, allerdings bekam ich dann völlig falsche Zahlen raus, im Grunde war das Ergebnis der Methode überall 10.


Wäre nett, wenn mir jemand weiter helfen könnte bzw. mir einen Hint in die richtige Richtung gibt 🙂
Bei Bedarf kann ich euch auch gern den kompletten Quelltext geben, allerdings hoffe/glaube ich nicht, dass das nötig sein wird.

lg,
Saberon
 
Zuletzt bearbeitet:
Wieso funktioniert das nicht mit dem statischen Zähler?
Frage jetzt nur interessehalber, ist etwas anderes als folgendes Konstrukt gesucht?

Java:
public class JavaForumPerson
{
	private static int anzahlPerson = 0;
	public JavaForumPerson()
	{
		anzahlPerson++;
		// System.out.println("Anzahl personen erzeugt: "+anzahl);
	}
	
	public int getAnzahlErstelltePersonen()
	{
		System.out.println("Erstellte Personen: "+anzahlPerson);
		return anzahlPerson;
	}
}
Java:
public class JavaForumFrau extends JavaForumPerson
{
	private static int anzahlFrau = 0;
	public JavaForumFrau()
	{
		anzahlFrau++;
		// System.out.println("Konstruktur: Anzahl Frauen erstellt:" +anzahlFrau);
	}
	
	
	public int getAnzahlErstellteFrauen()
	{
		System.out.println("Erstellte Frauen: "+anzahlFrau);
		return anzahlFrau;
	}
}
Java:
public class JavaForumMann extends JavaForumPerson
{
private static int anzahlManner = 0;
	public JavaForumMann()
	{
		anzahlManner++;
		// System.out.println("Konstruktur: Anzahl Männer erstellt:" +anzahlManner);
	}
	
	
	public int getAnzahlErstellteMaenner()
	{
		System.out.println("Erstellte Männer: "+anzahlManner);
		return anzahlManner;
	}

}
Java:
public class Startklasse
{

	public static void main(String[] args)
	{
		JavaForumPerson oPerson = new JavaForumPerson();
		JavaForumFrau oFrau = new JavaForumFrau();
		JavaForumMann oMann = new JavaForumMann();
		oPerson.getAnzahlErstelltePersonen();
		oFrau.getAnzahlErstellteFrauen();
		oMann.getAnzahlErstellteMaenner();
	}
}

Java:
Ausgabe:
Erstellte Personen: 3
Erstellte Frauen: 1
Erstellte Männer: 1
// EDITH: Verstehe jetzt... du sollst also bei Person.Anzahl, nicht nur die Anzahl der Personen, sondern auch die Anzahl der Männer und Frauen bekommen, und nicht extra aufrufe mann.anzahl und frau.anzahl ausführen?
 
Zuletzt bearbeitet:
Ich danke euch, instanceof hätte das Problem nur verschoben aber nicht gelöst. Der Ansatz von Zet ist das, wonach ich gesucht hatte, vielen Dank 🙂 Mein Fehler war ist, dass ich da scheinbar ein Klammerpaar bei der Methode in den Unterklassen vergessen habe -_-
 

Zurück
Oben