Gehaltsberechnung (Vererbung, abstrakte Methoden)

sengul

Bekanntes Mitglied
Hallo zusammen,
ich möchte meine Java Kenntnisse verbessern, und deshalb will ich die folgende Aufgabe lösen. Ein Teil der Aufgabe habe ich bereits selber gemacht, und ich hoffe es stimmt soweit? Aber leider komme ich nicht mehr weiter. Den es heisst in der Aufgabe "Schreiben Sie eine Methode, die eine beliebige Anzahl von Person-Objekten als Parameter erhält". Wie kann ich das machen, kann mir da jemand ein Beispiel geben? Die Aufgabe steht unten und mein Code hange ich dazu. Vielen Dank im Vorraus

Aufgabe: Erstellen Sie eine einfache Klassenhierarchie zur Gehaltsberechnung: Leiten Sie von einer abstrakten Basisklasse Person die zwei Unterklassen Angestellter und LeitenderAngestellter ab. Alle Personen sollen über einen Namen verfügen, allerdings wird das Gehalt jeweils unterschiedlich berechnet: – Das Gehalt für Angestellte beträgt 2.000 Euro und erhöht sich um 50 Euro je Überstunde (Attribut der Klasse Angestellter). – Das Gehalt für leitende Angestellte beträgt 3.000 Euro plus Bonus (Attribut der Klasse LeitenderAngestellter). Leitende Angestellte machen keine Überstunden! Schreiben Sie eine Methode, die eine beliebige Anzahl von Person-Objekten als Parameter erhält, für jede Person jeweils Name und Gehalt sowie die Gesamtsumme der Gehälter aller Personen ausgibt.

package ubungsblatt;

abstract class Person {

private String name;

public Person(String name) {
this.name = name;
}

public String getName() {
return name;
}
}



package ubungsblatt;

public class Angestellter extends Person{

private double salary = 2000;
public Angestellter(String name) {
super(name);
setSalary(salary,5);
}

public double getSalary() {
return salary;
}

public void setSalary(double newSalary, int uberStunden) {
salary = salary + (uberStunden *50);
}

public void info()
{
System.out.println("Name: " + getName()+"\n" + "Gehalt: " + getSalary());

}
}



package ubungsblatt;

public class LeitenderAngestellter extends Person {

private double salary = 3000;
public LeitenderAngestellter(String name) {
super(name);
setSalary(salary,500);
}

public double getSalary() {
return salary;
}
 

Robat

Top Contributor
Hallo sengul,

für mich hört sich das so an, als ob du eine variable Parameterliste benutzen sollst.
Das ganze ist in Java recht einfach zu implementieren.

Java:
public void foobar(Object... params)
{
      for(Object o : params)
      {
            System.out.println(o);
      }
}

Ich hab jetzt die Object Klasse nur als Beispiel genommen. Das geht auch mit deiner Personen Klasse (lt. Aufgabenstellung) :)
Das was da übergeben wird kannst du in der Methode selbst als Array behandeln und bspw. mit einer foreach - Schleife (oder normalen for-Schleife) durchlaufen.

PS:
Nächstes mal deinen Code bitte in [code=Java]MY CODE[/code]Tags posten :)
Danke.

Gruß
Robert
 

sengul

Bekanntes Mitglied
vielen Dank robert, ich habe es jetzt mit List hinbekommen.
Hange den gesamten Code an, vielleicht möchte mir jemand einen Hinwies oder anderen Vorschlag geben. Ich bin offen für Kritik.

Aufgabe: Erstellen Sie eine einfache Klassenhierarchie zur Gehaltsberechnung: Leiten Sie von einer abstrakten Basisklasse Person die zwei Unterklassen Angestellter und LeitenderAngestellter ab. Alle Personen sollen über einen Namen verfügen, allerdings wird das Gehalt jeweils unterschiedlich berechnet: – Das Gehalt für Angestellte beträgt 2.000 Euro und erhöht sich um 50 Euro je Überstunde (Attribut der Klasse Angestellter). – Das Gehalt für leitende Angestellte beträgt 3.000 Euro plus Bonus (Attribut der Klasse LeitenderAngestellter). Leitende Angestellte machen keine Überstunden! Schreiben Sie eine Methode, die eine beliebige Anzahl von Person-Objekten als Parameter erhält, für jede Person jeweils Name und Gehalt sowie die Gesamtsumme der Gehälter aller Personen ausgibt.

Klasse AbstractDemo
Java:
package ubungsblatt;

import java.util.*;

public class AbstractDemo {

    public void details(List<Angestellter> list) {
        Iterator<Angestellter> iterator = null;
        iterator = list.iterator();
        while (iterator.hasNext()) {
            Angestellter element = iterator.next();
            System.out.println("Name: " + element.getName() + "\t" + "Gehalt: " + element.getSalary());
        }
    }

    public void detailsLeitender(List<LeitenderAngestellter> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println("Name: " + list.get(i).getName() + "\t" + "Gehalt: " + list.get(i).getSalary());
        }
    }

    public double gesamtSumme(List<Angestellter> listA, List<LeitenderAngestellter> listL) {
        double summeA = 0;
        for (int i = 0; i < listA.size(); i++) {
            summeA = summeA + listA.get(i).getSalary();
        }
        for (int i = 0; i < listL.size(); i++) {
            summeA = summeA + listL.get(i).getSalary();
        }
        return summeA;
    }

    public static void main(String[] args) {

        AbstractDemo demo = new AbstractDemo();

        Angestellter a1 = new Angestellter("Hans", 3);
        Angestellter a2 = new Angestellter("Susanne", 6);
        Angestellter a3 = new Angestellter("Max", 2);

        LeitenderAngestellter l1 = new LeitenderAngestellter("Filiz", 500);
        LeitenderAngestellter l2 = new LeitenderAngestellter("Melanie", 0);
        LeitenderAngestellter l3 = new LeitenderAngestellter("John", 0);
        LeitenderAngestellter l4 = new LeitenderAngestellter("Tom", 500);

        List<Angestellter> list1 = new ArrayList<>();
        List<LeitenderAngestellter> list2 = new ArrayList<>();

        list1.add(a1);
        list1.add(a2);
        list1.add(a3);

        list2.add(l1);
        list2.add(l2);
        list2.add(l3);
        list2.add(l4);

        demo.details(list1);
        System.out.println();

        demo.detailsLeitender(list2);
        System.out.println("Gesamtsumme:\t" + demo.gesamtSumme(list1, list2));

    }
}

Klasse Person
Java:
package ubungsblatt;

abstract class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Klasse Angestellter
Java:
package ubungsblatt;

public class Angestellter extends Person {

    private double salary = 2000;

    public Angestellter(String name, int uberStunden) {
        super(name);
        setSalary(salary, uberStunden);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary, int uberStunden) {
        salary = salary + (uberStunden * 50);
    }
}

Klasse LeitenderAngestellter
Java:
package ubungsblatt;

public class LeitenderAngestellter extends Person {

    private double salary = 3000;

    public LeitenderAngestellter(String name, double bonus) {
        super(name);
        setSalary(salary, bonus);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary, double bonus) {
        salary = salary + bonus;
    }
}
 

sengul

Bekanntes Mitglied
vielen Dank robert, ich habe es jetzt mit List hinbekommen.
Hange den gesamten Code an, vielleicht möchte mir jemand einen Hinwies oder anderen Vorschlag geben. Ich bin offen für Kritik.

Aufgabe: Erstellen Sie eine einfache Klassenhierarchie zur Gehaltsberechnung: Leiten Sie von einer abstrakten Basisklasse Person die zwei Unterklassen Angestellter und LeitenderAngestellter ab. Alle Personen sollen über einen Namen verfügen, allerdings wird das Gehalt jeweils unterschiedlich berechnet: – Das Gehalt für Angestellte beträgt 2.000 Euro und erhöht sich um 50 Euro je Überstunde (Attribut der Klasse Angestellter). – Das Gehalt für leitende Angestellte beträgt 3.000 Euro plus Bonus (Attribut der Klasse LeitenderAngestellter). Leitende Angestellte machen keine Überstunden! Schreiben Sie eine Methode, die eine beliebige Anzahl von Person-Objekten als Parameter erhält, für jede Person jeweils Name und Gehalt sowie die Gesamtsumme der Gehälter aller Personen ausgibt.

Klasse AbstractDemo
Java:
package ubungsblatt;

import java.util.*;

public class AbstractDemo {

    public void details(List<Angestellter> list) {
        Iterator<Angestellter> iterator = null;
        iterator = list.iterator();
        while (iterator.hasNext()) {
            Angestellter element = iterator.next();
            System.out.println("Name: " + element.getName() + "\t" + "Gehalt: " + element.getSalary());
        }
    }

    public void detailsLeitender(List<LeitenderAngestellter> list) {
        for (int i = 0; i < list.size(); i++) {
            System.out.println("Name: " + list.get(i).getName() + "\t" + "Gehalt: " + list.get(i).getSalary());
        }
    }

    public double gesamtSumme(List<Angestellter> listA, List<LeitenderAngestellter> listL) {
        double summeA = 0;
        for (int i = 0; i < listA.size(); i++) {
            summeA = summeA + listA.get(i).getSalary();
        }
        for (int i = 0; i < listL.size(); i++) {
            summeA = summeA + listL.get(i).getSalary();
        }
        return summeA;
    }

    public static void main(String[] args) {

        AbstractDemo demo = new AbstractDemo();

        Angestellter a1 = new Angestellter("Hans", 3);
        Angestellter a2 = new Angestellter("Susanne", 6);
        Angestellter a3 = new Angestellter("Max", 2);

        LeitenderAngestellter l1 = new LeitenderAngestellter("Filiz", 500);
        LeitenderAngestellter l2 = new LeitenderAngestellter("Melanie", 0);
        LeitenderAngestellter l3 = new LeitenderAngestellter("John", 0);
        LeitenderAngestellter l4 = new LeitenderAngestellter("Tom", 500);

        List<Angestellter> list1 = new ArrayList<>();
        List<LeitenderAngestellter> list2 = new ArrayList<>();

        list1.add(a1);
        list1.add(a2);
        list1.add(a3);

        list2.add(l1);
        list2.add(l2);
        list2.add(l3);
        list2.add(l4);

        demo.details(list1);
        System.out.println();

        demo.detailsLeitender(list2);
        System.out.println("Gesamtsumme:\t" + demo.gesamtSumme(list1, list2));

    }
}

Klasse Person
Java:
package ubungsblatt;

abstract class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Klasse Angestellter
Java:
package ubungsblatt;

public class Angestellter extends Person {

    private double salary = 2000;

    public Angestellter(String name, int uberStunden) {
        super(name);
        setSalary(salary, uberStunden);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary, int uberStunden) {
        salary = salary + (uberStunden * 50);
    }
}

Klasse LeitenderAngestellter
Java:
package ubungsblatt;

public class LeitenderAngestellter extends Person {

    private double salary = 3000;

    public LeitenderAngestellter(String name, double bonus) {
        super(name);
        setSalary(salary, bonus);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary, double bonus) {
        salary = salary + bonus;
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
So wie ich die Aufgabe verstehe, gehört getSalary() als abstrakte Methode in die Klasse Person.

Die Methode zum Ausgeben und Berechnen soll dann nur eine List<Person> bekommen.


Guck dir außerdem mal die Iteration aus dem Beitrag von @Robat an, deine beiden Varianten sind nicht mehr wirklich gebräuchlich
 

sengul

Bekanntes Mitglied
Danke mrBrown, ich habe getSalary() als abstrakte methode in die Klasse Person gebracht, nun verstehe ich auch den Sinn einer abstracten Methode, habe den Code geandert und auch die iteration von @Robat genommen, und da steht jetzt auch nur eine Methode zum Ausgeben und Berechnen(mit zwei verschiedenen methoden) ist es jetzt richtig?

Klasse AbstractDemo
Java:
package ubungsblatt;

import java.util.*;

public class AbstractDemo {

    public void details(List<Person> list) {
        double summe = 0;
        Iterator<Person> iterator = null;
        iterator = list.iterator();
        while (iterator.hasNext()) {
            Person element = iterator.next();
            System.out.println("Name: " + element.getName() + "\t" + "Gehalt: " + element.getSalary());
            summe = summe + element.getSalary();
        }
        System.out.println("Gesamtsumme aller Gehalter: " + summe);
    }

    public void info(Person... params) {
        double summe = 0;
        for (Person o : params) {
            System.out.println("Name: " + o.getName() + "\t" + "Gehalt: " + o.getSalary());
            summe = summe + o.getSalary();
        }
        System.out.println("Gesamtsumme aller Gehalter: " + summe);
    }

    public static void main(String[] args) {

        AbstractDemo demo = new AbstractDemo();

        Angestellter a1 = new Angestellter("Hans", 3);
        Angestellter a2 = new Angestellter("Susanne", 6);
        Angestellter a3 = new Angestellter("Max", 2);

        LeitenderAngestellter l1 = new LeitenderAngestellter("Filiz", 500);
        LeitenderAngestellter l2 = new LeitenderAngestellter("Melanie", 0);
        LeitenderAngestellter l3 = new LeitenderAngestellter("John", 0);
        LeitenderAngestellter l4 = new LeitenderAngestellter("Tom", 500);

        List<Person> list1 = new ArrayList<>();
        list1.add(a1);
        list1.add(a2);
        list1.add(a3);
        list1.add(l1);
        list1.add(l2);
        list1.add(l3);
        list1.add(l4);
        demo.details(list1);
        System.out.println();
        demo.info(a1, a2, a3, l1, l2, l3, l4);
    }
}

Klasse Person
Java:
package ubungsblatt;

abstract class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
 
    public abstract double getSalary();
}

Klasse Angestellter
Java:
package ubungsblatt;

public class Angestellter extends Person {

    private double salary = 2000;

    public Angestellter(String name, int uberStunden) {
        super(name);
        setSalary(salary, uberStunden);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary, int uberStunden) {
        salary = salary + (uberStunden * 50);
    }
}

Klasse LeitenderAngestellter
Java:
package ubungsblatt;

public class LeitenderAngestellter extends Person {

    private double salary = 3000;

    public LeitenderAngestellter(String name, double bonus) {
        super(name);
        setSalary(salary, bonus);
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double newSalary, double bonus) {
        salary = salary + bonus;
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Du kannst in beiden Methoden for (Person o : params) nutzen.

Der ganze doppelte Code ist halt überflüssig ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
imocode Vererbung Problem mit Vererbung Java Basics - Anfänger-Themen 2
M Vererbung - Polymorphie Java Basics - Anfänger-Themen 37
L Java- Vererbung Java Basics - Anfänger-Themen 4
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 12
ineedhelpinjava Vererbung Java Basics - Anfänger-Themen 1
I JSON / XML Struktur mit Vererbung / Interfaces Java Basics - Anfänger-Themen 0
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
M Vererbung Java Basics - Anfänger-Themen 6
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
M Generics Vererbung Listen Java Basics - Anfänger-Themen 2
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
D Klassen und Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Java Basics - Anfänger-Themen 7
D Vererbung Java Basics - Anfänger-Themen 3
K Schleife berechnet kein Ergebnis (Vererbung) Java Basics - Anfänger-Themen 6
00111010101 Objektorientiertes Programmieren mit Vererbung (Zahlen in Array verschwinden) Java Basics - Anfänger-Themen 3
W Zur Vererbung: Wann und wie? Java Basics - Anfänger-Themen 35
H Datenkapselung, Vererbung und UML Java Basics - Anfänger-Themen 16
districon Super-Stichwort/ Vererbung Java Basics - Anfänger-Themen 3
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
1 Vererbung Klassenattribute Java Basics - Anfänger-Themen 9
TimoN11 Frage zu Java-Vererbung (Cast) Java Basics - Anfänger-Themen 5
N Thema Vererbung Java Basics - Anfänger-Themen 31
A Vererbung Vererbung Übung Java Basics - Anfänger-Themen 5
B Vererbung - Sichtbarkeitsmodifikation - protected Java Basics - Anfänger-Themen 10
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
G Java Vererbung Java Basics - Anfänger-Themen 8
Y Vererbung Konto - Anfangsprobleme Java Basics - Anfänger-Themen 7
A Vererbung Klassen im Bezug auf Auto´s Java Basics - Anfänger-Themen 18
A Klassen Vererbung und zusätzliche Unterklassen Java Basics - Anfänger-Themen 23
M Vererbung mit Enums Java Basics - Anfänger-Themen 8
Kirby.exe Vererbung im Detail erklärt? Java Basics - Anfänger-Themen 9
N Modellierung, vererbung, Java Basics - Anfänger-Themen 163
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung im Computerspiel Java Basics - Anfänger-Themen 7
J Probleme mit Vererbung Java Basics - Anfänger-Themen 4
I Vererbung Java Basics - Anfänger-Themen 13
W OOP Vererbung und Problem bei Zählschleife in einer Methode Java Basics - Anfänger-Themen 10
W Methoden Verständnisfrage Vererbung von Methoden Java Basics - Anfänger-Themen 14
V Vererbung Java Basics - Anfänger-Themen 2
J Frage zur Vererbung Java Basics - Anfänger-Themen 1
J Vererbung Java Basics - Anfänger-Themen 3
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
O Vererbung Ueben mit kleiner Datenstruktur von Räumen Java Basics - Anfänger-Themen 10
O Umgang mit Vererbung verstehen Java Basics - Anfänger-Themen 4
A Vererbung/Interfaces/Generics Java Basics - Anfänger-Themen 12
O Vererbung änderung des Konstruktors Java Basics - Anfänger-Themen 8
L Vererbung Java Basics - Anfänger-Themen 5
E HashMap+Vererbung Java Basics - Anfänger-Themen 11
E Vererbung super-Methoden Aufruf Java Basics - Anfänger-Themen 3
B Java Vererbung Fragen (zu Code Beispiel) Java Basics - Anfänger-Themen 3
A Objekterstellung bei der Vererbung Java Basics - Anfänger-Themen 7
P Vererbung Warum funktioniert die Vererbung hier nicht Java Basics - Anfänger-Themen 14
S Vererbung Java mehrfach Java Basics - Anfänger-Themen 10
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
A Konstruktoren Vererbung Java Basics - Anfänger-Themen 3
ReinerCoder Vererbung von JFrame in einer Klasse entfernen Java Basics - Anfänger-Themen 5
W Vererbung, abstract und Konstruktoren Java Basics - Anfänger-Themen 30
J Vererbung und Methodenaufruf Java Basics - Anfänger-Themen 11
G Polymorphie, Vererbung, statischer Typ, Laufzeittyp Java Basics - Anfänger-Themen 2
H Vererbung mit private instanzvariablen Java Basics - Anfänger-Themen 9
S Vererbung Funktionsweise Code zur Vererbung Java Basics - Anfänger-Themen 1
C Methoden Vererbung private Attribute/public Methoden Java Basics - Anfänger-Themen 4
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
D JavaFX Vererbung Java Basics - Anfänger-Themen 2
U Vererbung Generizität und Vererbung Java Basics - Anfänger-Themen 4
A Vererbung bei Klassen mit Objekt der Klasse im Konstruktor Java Basics - Anfänger-Themen 4
K Vererbung Octagon von Circle Java Basics - Anfänger-Themen 0
B Hilfe bei Vererbung Java Basics - Anfänger-Themen 2
D Vererbung Frage zum Klassenaufbau mit Vererbung Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
S Vererbung Java Basics - Anfänger-Themen 1
F Vererbung in zwei Richtungen? Java Basics - Anfänger-Themen 14
D Vererbung / Polymorphie Java Basics - Anfänger-Themen 5
O Vererbung Java Basics - Anfänger-Themen 5
MiMa Vererbung Theorie OK, Praxis ?? Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
C Vererbung - Ausgaben bestimmen Java Basics - Anfänger-Themen 6
S Vererbung Java Basics - Anfänger-Themen 10
L Setter und Getter/Vererbung Java Basics - Anfänger-Themen 6
C Konstruktoren und Vererbung Java Basics - Anfänger-Themen 2
J Kleinere Frage zur Vererbung/Objekterzeugung Java Basics - Anfänger-Themen 2
G Vererbung Java Basics - Anfänger-Themen 12
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
J Vererbung Vererbung von Methoden Java Basics - Anfänger-Themen 6
B Vererbung Java Basics - Anfänger-Themen 12
K Vererbung (super) Java Basics - Anfänger-Themen 2
A ArrayQueue mit Exceptions und Vererbung Java Basics - Anfänger-Themen 3
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
C Vererbung Java Basics - Anfänger-Themen 4
L Vererbung Java Basics - Anfänger-Themen 3
J Klassenorganisation | Vererbung Java Basics - Anfänger-Themen 1
B Vererbung Vererbung Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
A Benötige Hilfe bei Vererbung Java Basics - Anfänger-Themen 1
M Anfängerprobleme mit Vererbung Java Basics - Anfänger-Themen 27
J Vererbung Java Basics - Anfänger-Themen 9
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
J Konstruktor Problem bei Vererbung Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben