Objekte in Array erstellen und Methode in verschiedenen klassen aufrufen

Underfaker

Bekanntes Mitglied
Hallo nochmal (sorry schon das dritte Mal),

ich muss Stück für Stück Java-Dateien / Klassen schreiben die etwas bestimmtes beinhalten, das hat wunderbar funktioniert (das Problem kommt erst ganz unten).

1.
- Klasse Angestellter erstellen
- Attribute: double stdProMonat und double geldProStunde
- Methode public double berechneMonatseinkommen() berechnet das Einkommen eines Angestellten
- zwei Konstruktoren besitzten
public Angestellter( double arbeitstdProMonat,
double gehaltProStunde )

public Angestellter()

Java:
class Angestellter

{

	double stdProMonat;
	double geldProStunde;
	double bonusProMonat;

	public double berechneMonatseinkommen(double stdProMonat, double geldProStunde, double bonus)

	{

	double monatseinkommen = stdProMonat*geldProStunde+bonus;

	return monatseinkommen;

	}

	public Angestellter(double arbeitstdProMonat, double gehaltProStunde)

	{

	this(arbeitstdProMonat, gehaltProStunde, 0.0);

	}

	public Angestellter(double arbeitstdProMonat, double gehaltProStunde, double bonus)

	{

	this.stdProMonat = arbeitstdProMonat;

	this.geldProStunde = gehaltProStunde;

	this.bonusProMonat = bonus;

	}

}

2. Klasse Professor mit Konstruktoren etc. erstellen:

Java:
class Professor extends Angestellter

{

	public Professor (double gehaltProStunde)

	{

	super(160, gehaltProStunde, 0);

	}

}

3. Analoge Klasse Mitarbeiter:

Java:
class Mitarbeiter extends Angestellter

{

	public Mitarbeiter(double arbeitstdProMonat, double gehaltProStunde)

	{

	super(arbeitstdProMonat, gehaltProStunde, 500);

	}

}

Und dann als 4. sollte die (Main) Klasse Uni erstellt werden , 3 Elemente sollten so erzeugt werden:
personal[0]=new Angestellter(22,11.5);
personal[1]=new Professor(121.40);
personal[2]=new Mitarbeiter(40, 15);

Außerdem sollte das Einkommen der drei ANgestellten als Summe ausgegeben werden (mit einer for-Schleife)

Java:
class Uni

{

	public static void main (String args[])

	{
		Object[] personal = new Object[2];

		personal[0]=new Angestellter(22,11.5);

		personal[1]=new Professor(121.40);

		personal[2]=new Mitarbeiter(40, 15);

		double Summe = 0;

		for (int i=0; i <= 2; i++)

		{

			Summe += berechneMonatseinkommen(personal[i]);

		}

		System.out.println("Die Summe betraegt: "+Summe);

	}

}

Zum ersten:
Java:
Object[] personal = new Object[2];
Ist das so ok? Ich wusste nicht wie ich ein Array deklariere, dass die Vorgaben der Aufgabe umsetzen kann, also habe ich das rausgesucht.

Zum Zweiten:

Java:
Summe += berechneMonatseinkommen(personal[i]);

Hier gibt es offenbar einen Fehler, wie kann ich die Funktion richtig aufrufen?
Bzw. anders (sicher zutreffender) wo habe ich hier grundlegend Fehler gemacht, weshalb das so nicht klappt.
Bspw. hat es mich verwirrt, dass ich in ANgestellter zweimal einen Konstruktor mit selben Namen erstellen sollte...

Die Fehlermeldung (wer sie sehen will):

Uni.java:22: cannot find symbol
symbol : method berechneMonatseinkommen(java.lang.Object)
location: class Uni
Summe += berechneMonatseinkommen(personal);
^
Uni.java:22: inconvertible types
found : <nulltype>
required: double
Summe += berechneMonatseinkommen(personal);


Danke schonmal für eure Hilfe 🙂
 
Die Methode
Code:
berechneMonatseinkommen
ist in der Klasse
Code:
Uni
überhaupt nicht vorhanden, sondern nur in
Code:
Angestellter
. Folglich wirst du, um sie aufrufen zu können, auch eine Instanz von
Code:
Angestellter
erstellen müssen (nicht
Code:
Object
, wer hat dir den Quatsch erzählt??) und auf diesem die gewünschte Funktion aufrufen:

Java:
Angestellter a = new Mitarbeiter(...);
// .. tue etwas mit a
a.berechneMonatsEinkommen(...);

Deine Methode erwarten übrigens drei Double-Werte, nicht einen Angestellten. Also gib ihr auch drei Double-Werte...

[EDIT]Die drei Werte übergibst du doch schon zur erstellung der Instanz von Angestellter, warum brauchst du die nochmal in
Code:
berechneMonatseinkommen
?[/EDIT]
 
Zuletzt bearbeitet:
"nicht Object, wer hat dir den Quatsch erzählt??" Ist das auf die Deklaration bezogen, wie deklariere ich sonst das Array personal?

Also das mit der Instanz habe ich bereits änlich probiert:

Java:
Angestellter a = new Mitarbeiter();

		personal[0]=new Angestellter(22,11.5);

		personal[1]=new Professor(121.40);

		personal[2]=new Mitarbeiter(40, 15);

		double Summe = 0;

		for (int i=0; i <= 2; i++)

		{

			Summe += a.berechneMonatseinkommen(personal[i]);

		}

		System.out.println("Die Summe betraegt: "+Summe);

So ungefähr war es bei mir lieferte aber ebnfalls Fehler deswegen hatte ich das verworfen, sollte das unter Umständen anders werden?

Uni.java:10: cannot find symbol
symbol : constructor Mitarbeiter()
location: class Mitarbeiter
Angestellter a = new Mitarbeiter();
^
Uni.java:24: berechneMonatseinkommen(double,double,double) in Angestellter
t be applied to (java.lang.Object)
Summe += a.berechneMonatseinkommen(personal);
^
Uni.java:24: inconvertible types
found : <nulltype>
required: double
Summe += a.berechneMonatseinkommen(personal);


[EDIT]Wie komme ich denn wieder an die drei double Werte, ich hatte angnommen die würden eben dort gespeichert werden[/EDIT]
 
Java:
    	Angestellter[] personal = new Angestellter[3];
    	personal[0]=new Angestellter(22,11.5);
    	personal[1]=new Professor(121.40);
    	personal[2]=new Mitarbeiter(40, 15);
Polymorphie

Java:
        for (int i=0; i <= 2; i++)
        	Summe += personal[i].berechneMonatseinkommen();
Die Methode gehört zu einem Objekt vom Typ Angestellter oder einer davon erbenden Klasse.

Java:
    public double berechneMonatseinkommen() {
    	return stdProMonat*geldProStunde+bonusProMonat;
    }
Es bietete sich hier an, sofort auf die Instanzvariablen des aufrufenden Objektes zurückzugreifen.

Sieh dir am besten eine Einführung in OOP an.
 
Wie komme ich denn wieder an die drei double Werte, ich hatte angnommen die würden eben dort gespeichert werden
Die sind doch schon in a drin, wenn du selbiges so definiert hast:
Java:
Angestellter a = new Mitarbeiter(22, 11.5);

Tut mir Leid, dass mein obiger Edit zu spät kam, es muss natürlich
Code:
new Mitarbeiter(22, 11.5)
heißen.
 

Zurück
Oben