/*
 * Created on 05.04.2004
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
package Methode_Klassen_etc;

/**
 * @author MÜLLER
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
/* Gehaltsberechnung.java */

import java.util.Date;

// eine abstacte Klasse, von der andere Klassen abgeleitet werden sollen
abstract class Mitarbeiter {
    int persnr;
    String name;
    Date eintritt;

    public Mitarbeiter() {
    }

    // Diese Methode wird als abstract definiert, da sich je nach "Art des Mitarbeiters",
    // das Monatsbrutto anders zusammensetzt
    public abstract double monatsBrutto();
}
// abgeleitete Klasse Arbeiter
class Arbeiter extends Mitarbeiter {
    double stundenlohn = 10;
    double anzahlstunden = 160;
    double ueberstundenzuschlag;
    double anzahlueberstunden;
    double schichtzulage;

    public double monatsBrutto() {
        return stundenlohn * anzahlstunden
            + ueberstundenzuschlag * anzahlueberstunden
            + schichtzulage;
    }
}
//abgeleitete Klasse Angestellter
class Angestellter extends Mitarbeiter {
    double grundgehalt = 1000;
    double ortszuschlag = 200;
    double zulage = 100;

    public double monatsBrutto() {
        return grundgehalt + ortszuschlag + zulage;
    }
}
//abgeleitete Klasse Manager
class Manager extends Mitarbeiter {
    double fixgehalt = 2000;
    double provision1;
    double provision2;
    double umsatz1;
    double umsatz2;

    public double monatsBrutto() {
        return fixgehalt
            + umsatz1 * provision1 / 100
            + umsatz2 * provision2 / 100;
    }
}

public class Gehaltsberechnung {
    //1
    private static final int ANZ_MA = 3;
    private static Mitarbeiter[] ma;
    private static double bruttosumme;

    public static void main(String[] args) {
        //2
        ma = new Mitarbeiter[ANZ_MA];

        //Mitarbeiter-Array füllen, z.B.
        ma[0] = new Manager();
        ma[1] = new Arbeiter();
        ma[2] = new Angestellter();
        //...

       
        for (int i = 0; i < ma.length; ++i) { //3
           System.out.println(ma[i].monatsBrutto());
        }
    }

}