Objektorientierte Programmierung

FiselM

Mitglied
ich habe bei folgendem Quelltext irgendwie einen hänger drin.

aber ich finde ihn nicht
Bitte um Hilfe

class Mitarb
{
private int persnr;
private String name;
private String vorname;
private String adresse;
private String akademischertitel;
//protected int sollstunden = 160;
//protected int iststunden;
protected int gehalt = 0;

//Konstruktor
public Mitarb(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
this.persnr = persnr;
this.name = name;
this.vorname = vorname;
this.adresse = adresse;
this.akademischertitel = akademischertitel;
//this.sollstunden = sollstunden;
//this.iststunden = iststunden;
//this.gehalt = gehalt;
}
public int getPersnr()
{
return persnr;
}
public String getName()
{
return name;
}
public String getVorname()
{
return vorname;
}
public String getAdresse()
{
return adresse;
}
public String getAkademischertitel()
{
return akademischertitel;
}
//public int getSollstunden()
//{
// return sollstunden;
//}
//public int getIststunden()
//{
// return iststunden;
//}

public void rechnen(int Iststunden)
{
//gehalt = 10000;
}
}


class Angestellter extends Mitarb
{
//Konstruktor
public Angestellter(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
super(persnr, name, vorname, adresse, akademischertitel);

}
@Override
public void rechnen(int gehalt)
{
int iststunden = 0;
int sollstunden = 160;
int grundgehalt = 30000;
int ueberstunden = 0;
int ueberstundenzuschlag = 15;
if (iststunden > sollstunden)
{
ueberstunden = (iststunden - sollstunden);
gehalt = grundgehalt + (ueberstunden * ueberstundenzuschlag);
}
else
gehalt = grundgehalt;
}
public int getGehalt()
{
return gehalt;
}
}

class Geschaeftsfuehrer extends Mitarb
{
//Konstruktor
public Geschaeftsfuehrer(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
super(persnr, name, vorname, adresse, akademischertitel);
}
@Override
public void rechnen(int gehalt)
{
gehalt = 100000;
System.out.println(gehalt);
}

public int getGehalt()
{
return gehalt;

}
}

public class MitarbUI
{
public static void main(String args[])
{
Angestellter einAngestellter = new Angestellter(1, "Meier","Hans","Teststrasse 3 89584 Hausen","Diplom-Betriebswirt");
Geschaeftsfuehrer einGeschaeftsfuehrer = new Geschaeftsfuehrer(2, "Müller","Heinz","Siegerallee 5 89709 Dorf","Dr.");

einzahlen(einAngestellter,200);
}
private static void einzahlen(Angestellter einObjekt, int iststunden)
{
einObjekt.rechnen(iststunden);
System.out.println("Der Mitarbeiter mit der Personalnummer " +
einObjekt.getPersnr() + " hat ein Gehalt " +
einObjekt.getGehalt() );
//einObjekt.getKontostand());
}
}
 
Es fehlt das this vor gehalt in der Methode rechnen(int gehalt),
versuchs mal so:

public void rechnen(int gehalt) {
int iststunden = 0;
int sollstunden = 160;
int grundgehalt = 30000;
int ueberstunden = 0;
int ueberstundenzuschlag = 15;
if (iststunden > sollstunden) {
ueberstunden = (iststunden - sollstunden);
this.gehalt = grundgehalt + (ueberstunden * ueberstundenzuschlag);
} else
this.gehalt = grundgehalt;
}


Xanadoo
 
Zuletzt bearbeitet:
Hallo,

nur mal eine kleine Anmerkung. benutzte nächstes mal doch die Code-Tags. Danke

MFG

zEriX
 
Aber besser als
PHP:
this.gehalt
ist
PHP:
super.gehalt
da dann auch ersichtlich ist das du das Gehalt der Oberklasse setzt.
 
Ich nehme an, dass du so immer noch nicht ganz das gewünschte Ergebnis bekommst...

Du übergibst im Aufruf der Methode rechnen(...) in der Main-Methode ein Parameter "iststunden", diesr wird aber in der Methode rechnen(...) selbst dem Gehalt zugewiesen.
Wahrscheinlich sollte dieser dort eher der lokalen Variable iststunden zugewiesen werden.
(Obwohl, eigentlich wird diese lokale Variable gar nicht benötigt, du kannst ja den Vergleich direkt mit dem übergebenen Parameter machen)

Xanadoo
 
class Mitarb
{
private int persnr;
private String name;
private String vorname;
private String adresse;
private String akademischertitel;
//protected int sollstunden = 160;
//protected int iststunden;
protected int gehalt = 0;

//Konstruktor
public Mitarb(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
this.persnr = persnr;
this.name = name;
this.vorname = vorname;
this.adresse = adresse;
this.akademischertitel = akademischertitel;
//this.sollstunden = sollstunden;
//this.iststunden = iststunden;
//this.gehalt = gehalt;
}
public int getPersnr()
{
return persnr;
}
public String getName()
{
return name;
}
public String getVorname()
{
return vorname;
}
public String getAdresse()
{
return adresse;
}
public String getAkademischertitel()
{
return akademischertitel;
}
//public int getSollstunden()
//{
// return sollstunden;
//}
//public int getIststunden()
//{
// return iststunden;
//}

public void rechnen(int Iststunden)
{
//gehalt = 10000;
}
}


class Angestellter extends Mitarb
{
//Konstruktor
public Angestellter(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
super(persnr, name, vorname, adresse, akademischertitel);

}
@Override
public void rechnen(int gehalt)
{
int iststunden = 180;
int sollstunden = 160;
int grundgehalt = 30000;
int ueberstunden = 0;
int ueberstundenzuschlag = 15;
if (iststunden > sollstunden)
{
ueberstunden = (iststunden - sollstunden);
this.gehalt = grundgehalt + (ueberstunden * ueberstundenzuschlag);
}
else
this.gehalt = grundgehalt;
}
public int getGehalt()
{
return gehalt;
}
}

class Geschaeftsfuehrer extends Mitarb
{
//Konstruktor
public Geschaeftsfuehrer(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
super(persnr, name, vorname, adresse, akademischertitel);
}
@Override
public void rechnen(int gehalt)
{
this.gehalt = 100000;
//System.out.println(gehalt);
}

public int getGehalt()
{
return gehalt;

}
}

class Aushilfe extends Mitarb
{
//Konstruktor
public Aushilfe(int persnr, String name, String vorname,
String adresse, String akademischertitel)
{
super(persnr, name, vorname, adresse, akademischertitel);
}
@Override
public void rechnen(int gehalt)
{
int iststunden = 30;
int stundensatz = 8;
this.gehalt = iststunden * stundensatz ;
//System.out.println(gehalt);
}

public int getGehalt()
{
return gehalt;

}
}

public class MitarbUI
{
public static void main(String args[])
{
Angestellter einAngestellter = new Angestellter(1, "Meier","Hans","Teststrasse 3 89584 Hausen","Diplom-Betriebswirt");
Geschaeftsfuehrer einGeschaeftsfuehrer = new Geschaeftsfuehrer(2, "Müller","Heinz","Siegerallee 5 89709 Dorf","Dr.");
Aushilfe einAushilfe = new Aushilfe(3, "Schmitt","Peter","testus 1 89900 Stadt","--");

einzahlen(einAngestellter,200);
einzahlen(einGeschaeftsfuehrer,0);
einzahlen(einAushilfe,100);
}
private static void einzahlen(Aushilfe einObjekt, int iststunden)
{
einObjekt.rechnen(iststunden);
System.out.println("Der Mitarbeiter mit der Personalnummer " +
einObjekt.getPersnr() + " hat ein Gehalt " +
einObjekt.getGehalt() );
//einObjekt.getKontostand());
}

}

Ich habe jetzt das Programm einzeln zum laufen gebracht. Jeweils für geschäftsführer , Aushilfe und Angestellten,

Wie sieht das Programm aus für eine Varjable Eingabe der Anstellungsart und der
Iststunden? Bitte um Hilfe?
 
Ich würde sagen, als 1. zügelst du die Methode
Code:
public int getGehalt(){
		return gehalt;
}
in die Superklasse Mitarb.java, denn die scheint ja bei allen Subklassen genau gleich zu sein.
Weiter übergibtst du beim Methodenaufruf der Methode einzahlen(...) nicht die konkrete Subklasse, sondern die Superklasse Mitarb.java als Parametertyp.

Dein übregebener Parameter der Methode rechnen(int iststunden) macht im Moment gar nichts, den könntest du genau so gut weglassen.
 
Zurück