Was löst meine NullPointerException aus? (Vererbung)

user1234569

Mitglied
Moin!
Habe mich an eine Aufgabe aus dem Studium gewagt die wie folgt klingt: "Schreiben Sie ein Programm, das die Struktur eines Unternehmens abbildet. In dem Unternehmen gibt es mehrere Abteilungen. In jeder Abteilung arbeiten mehrere Angestellte und ein Abteilungsleiter." Der Angestellte hat dann diverse Attribute und der Abteilungsleiter soll ein Angestellter sein (also von ihm erben).
Soweit so gut, habe das ganze dann ausprogrammiert, wollte es mit ein paar Werten füttern aber es wird eine NullPointerException geworfen. Ich weiß, was
diese bedeutet und deshalb ist es mir umso rätselhafter, weshalb sie in diesem Fall geworfen wird. Hier ist der Code:
Java:
public class Aufg3Unternehmen {
    Aufg3Abteilung[] abteilungen;
}
Java:
public class Aufg3Abteilung {
    Aufg3Angestellter[] angestellte;
    Aufg3Abteilungsleiter abteilungsleiter;
}
Java:
public class Aufg3Angestellter {
    String nachname;
    String vorname;
    String identifikator;
    double grundgehalt = 2000;
    double gehaltsfaktor = 1;
    String geburtsdatum;
    double gehalt;
    
    public double getGehalt() {
        gehalt = grundgehalt * gehaltsfaktor;
        return gehalt;
    }
    
    public String getNachname()  {
        return nachname;
    }
    public void setNachname(String nachname) {
        this.nachname = nachname;
    }
    
    public String getVorname()  {
        return vorname;
    }
    public void setVorname(String vorname) {
        this.vorname = vorname;
    }
    
    public String getIdentifikator()  {
        return identifikator;
    }
    public void setIdentifikator(String identifikator) {
        this.identifikator = identifikator;
    }
    
    public double getGrundgehalt()  {
        return grundgehalt;
    }
    public void setGrundgehalt(double grundgehalt) {
        this.grundgehalt = grundgehalt;
    }
    
    public double getGehaltsfaktor() {
        return gehaltsfaktor;
    }
    public void setGehaltsfaktor(double gehaltsfaktor) {
        this.gehaltsfaktor = gehaltsfaktor;
    }
    
    public String getGeburtsdatum() {
        return geburtsdatum;
    }
    public void setGeburtsdatum(String geburtsdatum) {
        this.geburtsdatum = geburtsdatum;
    }
}
Java:
public class Aufg3Abteilungsleiter extends Aufg3Angestellter {
    double gehaltsfaktor = 2;
    public void befoerdern(Aufg3Angestellter angestellter) {
        angestellter.gehaltsfaktor = angestellter.gehaltsfaktor * 1.1;
    }
    
    @Override
    public double getGehalt() {
        gehalt = grundgehalt * gehaltsfaktor;
        return gehalt;
    }
}
Java:
public class Aufg3Main {
    public static void main(String[] args) {
        Aufg3Unternehmen unternehmen = new Aufg3Unternehmen();
        unternehmen.abteilungen = new Aufg3Abteilung[1];
        unternehmen.abteilungen[0].angestellte = new Aufg3Angestellter[1];
        unternehmen.abteilungen[0].abteilungsleiter = new Aufg3Abteilungsleiter();
        unternehmen.abteilungen[0].angestellte[0] = new Aufg3Angestellter();
        
        System.out.println("Angestellter Gehalt: " + unternehmen.abteilungen[0].angestellte[0].getGehalt());
        System.out.println("Abteilungsleiter Gehalt: " + unternehmen.abteilungen[0].abteilungsleiter.getGehalt());
        
        unternehmen.abteilungen[0].abteilungsleiter.befoerdern(unternehmen.abteilungen[0].angestellte[0]);
        System.out.println("Angestellter befördert Gehalt: " + unternehmen.abteilungen[0].angestellte[0].getGehalt());
    }
}
 

Robat

Top Contributor
Nein. In der Main Methode versuchst du einzelne Elemente deines Arrays zu initialisieren.
Vorher musst du aber noch dein Array initialisieren.

Stell dir vor: Du versuchst gerade Dinge in ein Regal zustellen .. das Regal gibt es aber noch gar nicht.
Java:
String[] regal = new String[5];
regal[0] = "Buch";
regal[1] = "Pflanze";
...
 

user1234569

Mitglied
Nein. In der Main Methode versuchst du einzelne Elemente deines Arrays zu initialisieren.
Vorher musst du aber noch dein Array initialisieren.

Stell dir vor: Du versuchst gerade Dinge in ein Regal zustellen .. das Regal gibt es aber noch gar nicht.
Java:
String[] regal = new String[5];
regal[0] = "Buch";
regal[1] = "Pflanze";
...
Okay verstanden. Aber wie initalisiere ich die Abteilung, die hat ja schließlich keine Attribute die ich belegen kann? Beim Angestellten ist das ja simpel mit einem Konstruktor....
 

Robat

Top Contributor
Du kannst es auch hier im Konstruktor machen. Die Frage ist sicherlich eher wie viele Elemente das Array haben soll.
Ist dazu in der Aufgabenstellung was gegeben? Falls nicht musst du eben zB ein Array mit 10 Elementen anlegen und, falls mehr hinzugefügt werden sollen, das Array "vergrößern".
Später würde man dafür eine Liste nehmen - die werdet ihr aber sicherlich noch nicht behandelt haben.
 

user1234569

Mitglied
Nein. In der Main Methode versuchst du einzelne Elemente deines Arrays zu initialisieren.
Vorher musst du aber noch dein Array initialisieren.

Stell dir vor: Du versuchst gerade Dinge in ein Regal zustellen .. das Regal gibt es aber noch gar nicht.
Java:
String[] regal = new String[5];
regal[0] = "Buch";
regal[1] = "Pflanze";
...
Habe es jetzt gelöst indem ich in der Abteilung-Klasse einen Konstruktor wie folgt angelegt habe:
Java:
    public Aufg3Abteilung(Aufg3Angestellter[] angestellte, Aufg3Abteilungsleiter abteilungsleiter) {
        this.angestellte = angestellte;
        this.abteilungsleiter = abteilungsleiter;
    }
Dann noch Konstruktoren in Angestellter- und Abteilungsleiter-Klasse und dann die Main Methode geändert zu:
Java:
        unternehmen.abteilungen = new Aufg3Abteilung[1];
        unternehmen.abteilungen[0] = new Aufg3Abteilung(new Aufg3Angestellter[1], new Aufg3Abteilungsleiter("Boss", "Big", "bb", "01.01.1990"));
        unternehmen.abteilungen[0].angestellte[0] = new Aufg3Angestellter("Müller", "Max", "mm", "01.01.1990");
Wirkt auf mich zwar um einiges komplizierter aber naja klappt! Danke für die Erklärung
 

user1234569

Mitglied
Du kannst es auch hier im Konstruktor machen. Die Frage ist sicherlich eher wie viele Elemente das Array haben soll.
Ist dazu in der Aufgabenstellung was gegeben? Falls nicht musst du eben zB ein Array mit 10 Elementen anlegen und, falls mehr hinzugefügt werden sollen, das Array "vergrößern".
Später würde man dafür eine Liste nehmen - die werdet ihr aber sicherlich noch nicht behandelt haben.
Listen haben wir bereits letztes Semester gemacht. Mir ist klar, dass ein Array hier aufgrund seiner anfangs festgelegten Größe Probleme verursachen kann, da in der Aufgabenstellung dazu aber nichts gesagt wird, und er einfacher zu handeln ist, löse ich die Aufgabe mit einem (sehr kleinen) Array.
 

Robat

Top Contributor
Du machst es auch komplizierter, als es eigentlich sein muss :p
Java:
public class Aufg3Abteilung {
    private Aufg3Angestellter[] angestellte;

    public Aufg3Abteilung() {
         this.angestellte = new Aufg3Abteilung[1];
    }
}
 

Robat

Top Contributor
Listen haben wir bereits letztes Semester gemacht. Mir ist klar, dass ein Array hier aufgrund seiner anfangs festgelegten Größe Probleme verursachen kann, da in der Aufgabenstellung dazu aber nichts gesagt wird, und er einfacher zu handeln ist, löse ich die Aufgabe mit einem (sehr kleinen) Array.
Wenn ihr diese bereits hattet, solltest du sie auch verwenden. Das macht nämlich nichts komplizierter sondern einfacher ;)
Java:
public class Aufg3Abteilung {
    private List<Aufg3Angestellter> angestellte;

    public Aufg3Abteilung() {
         this.angestellte = new ArrayList<>();
    }

    public void angestelltenHinzufuegen(Aufg3Angestellter angestellter) {
         this.angestellte.add(angestellter);
    }
}
 

user1234569

Mitglied
Du machst es auch komplizierter, als es eigentlich sein muss :p
Java:
public class Aufg3Abteilung {
    Aufg3Angestellter[] angestellte;

    public Aufg3Abteilung() {
         this.angestellte = new Aufg3Abteilung[1];
    }
}
Ja aber so würde ich ja schon in der Abteilung-Klasse festlegen, wie groß der "angestellte" Array sein soll, das gefällt mir an der Lösung nicht so :D Denke auch du meinst " this.angestellte = new Aufg3Angestellter[1];" anstatt "this.angestellte = new Aufg3Abteilung[1];"

Wenn ihr diese bereits hattet, solltest du sie auch verwenden. Das macht nämlich nichts komplizierter sondern einfacher ;)
Java:
public class Aufg3Abteilung {
    private List<Aufg3Angestellter> angestellte;

    public Aufg3Abteilung() {
         this.angestellte = new ArrayList<>();
    }

    public void angestelltenHinzufuegen(Aufg3Angestellter angestellter) {
         this.angestellte.add(angestellter);
    }
}
Ach ne solche Listen mit ArrayList hatten wir noch nicht, das kommt erst bald.
Ich meinte Listen/Bäume mit Knoten und getNext(), setPrev(), setLeft(), etc....
 

Robat

Top Contributor
Denke auch du meinst " this.angestellte = new Aufg3Angestellter[1];" anstatt "this.angestellte = new Aufg3Abteilung[1];"
Ja meine ich. Bin beim Copy&Pasten zu schnell gewesen. ;)
Ja aber so würde ich ja schon in der Abteilung-Klasse festlegen, wie groß der "angestellte" Array sein soll
Alternativ könntest du auch einfach die Größe übergeben. Da die bei dir aber momentan eh immer 1 ist spielt das keine Rolle.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Warum löst der Changelistener nicht aus ? Java Basics - Anfänger-Themen 5
C ButtonController löst mehrere Methoden aus Java Basics - Anfänger-Themen 5
U JMenuItem löst NPE aus Java Basics - Anfänger-Themen 3
T If löst Exception aus Java Basics - Anfänger-Themen 9
G Observer löst zweimal aus Java Basics - Anfänger-Themen 8
Z Enter löst einen button aus aber wie? Java Basics - Anfänger-Themen 16
G Ein Java Programm welches ein lineares Gleichungssystem löst Java Basics - Anfänger-Themen 16
N CheckboxMenuItem löst kein ActionEvent aus Java Basics - Anfänger-Themen 4
C Rechnen mit Brüchen, ist meine Lösung soweit richtig? Java Basics - Anfänger-Themen 4
P Wie kann ich meine Keylistener Klasse unterscheiden lassen, von welcher "Quelle" der Input kommt? Java Basics - Anfänger-Themen 2
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
J Meine Mails gehen nicht raus Java Basics - Anfänger-Themen 8
W Streams in Java und was bedeutet meine Konsolen-Ausgabe? Java Basics - Anfänger-Themen 4
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
sserio Wieso werden nicht alle Primzahlen bis 1000 in meine Liste gepackt ? Java Basics - Anfänger-Themen 8
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
O Warum ist meine Antwort falsch? Java Basics - Anfänger-Themen 3
E Meine JCombobox werte an ohne selectiert zu haben Java Basics - Anfänger-Themen 6
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
W Wie kann ich meine Methode aufrufen? Java Basics - Anfänger-Themen 29
H Meine Tabelle befüllen in .fxml Java Basics - Anfänger-Themen 16
E Warum kann ich meine jar-Datei nicht öffnen Java Basics - Anfänger-Themen 20
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
S Meine Java "Wahrsagerin" Java Basics - Anfänger-Themen 9
C Ich brauche hilfe für meine Klausur Java Basics - Anfänger-Themen 13
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
R Meine Ratemaschine Java Basics - Anfänger-Themen 3
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
B Ist meine Klasse richtig kommentiert? Java Basics - Anfänger-Themen 2
J Erste Schritte Vorsicht Spaghetti-Code! Wie verschachtel ich meine If-Anweisung??? Java Basics - Anfänger-Themen 4
snipesss Eclipse Neon findet meine Projekte nicht? Java Basics - Anfänger-Themen 1
snipesss IDE findet meine .txt Datei nicht! Java Basics - Anfänger-Themen 12
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
D Wie bekomme ich meine Ausgabe in Form von "2^x" hin? Java Basics - Anfänger-Themen 1
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
C Meine erste Funktion Java Basics - Anfänger-Themen 12
A Meine erste Bibliothek erstellen Java Basics - Anfänger-Themen 24
Z Meine ersten Gehversuche Java Basics - Anfänger-Themen 11
Dit_ Ich kenne meine Koordinaten. Wo bin ich? Java Basics - Anfänger-Themen 2
K Klassen Meine Klasse wird nicht anerkannt Java Basics - Anfänger-Themen 7
M Suche Korrektor für meine Lösung (FH: Java1 - Übungsklausur) Java Basics - Anfänger-Themen 4
D Wie kann meine Klasse in ein JPanel zeichnen? Java Basics - Anfänger-Themen 14
J Datentypen Meine Hashliste ist nicht unique Java Basics - Anfänger-Themen 5
S OOP Wie muss meine Klasse zu dieser main aussehen? Java Basics - Anfänger-Themen 5
M Meine erste Java Programmierung funzt nicht :-( Java Basics - Anfänger-Themen 34
C Denkanstoss für meine Auswertung Java Basics - Anfänger-Themen 5
L Warum erkennt java meine methode nicht? Java Basics - Anfänger-Themen 17
S Irgendwie kann ich meine Eclipse Projekte nicht mehr veraendern..? Java Basics - Anfänger-Themen 5
M Wo sind meine double-Zahlen? Java Basics - Anfänger-Themen 2
A Hilfe meine Titel werden alle abgelehnt Java Basics - Anfänger-Themen 4
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
K Warum adiert meine Methode nicht die eins ? Java Basics - Anfänger-Themen 19
K Warum wird meine Graphik zwei Mal gezeichnet ? Java Basics - Anfänger-Themen 12
Kr0e Eclips + JOGL -> Wo ist meine MAIN-Funktion hin ? Java Basics - Anfänger-Themen 9
R Meine erste Klasse: Punkt Java Basics - Anfänger-Themen 3
U Habe meine .class files gelöscht. Java Basics - Anfänger-Themen 3
gummibaerchen Methode überschreibt meine Variable Java Basics - Anfänger-Themen 5
N Programm das mir anzeigt wo meine Freundin ist. Java Basics - Anfänger-Themen 10
Schandro Meine Fragensammlung Java Basics - Anfänger-Themen 9
S daten per url in meine Klasse? Java Basics - Anfänger-Themen 12
A meine eigene IO Klasse Java Basics - Anfänger-Themen 3
D Meine SetMethode geht nicht || Fenster schließen Java Basics - Anfänger-Themen 3
T Java Programm ordnet meine Objecte immer falsch an Java Basics - Anfänger-Themen 4
M wie kann ich meine Projekte auf einen stick speichern? Java Basics - Anfänger-Themen 6
S Wie ist meine Strucktur Java Basics - Anfänger-Themen 11
F Eingabe darf nur 1 oder 0 sein. Meine Lösung macht Probleme. Java Basics - Anfänger-Themen 8
A Möchte Java - Chat in meine Homepage einbinden. Java Basics - Anfänger-Themen 4
M meine ersten versuche Java Basics - Anfänger-Themen 8
M wie pack ich das swt in meine *.jar Java Basics - Anfänger-Themen 8
S ich stör schon widr wegen meine gui Java Basics - Anfänger-Themen 2
R Welches inferface und somit welche IP benutzt meine JVM? Java Basics - Anfänger-Themen 2
M Meine Java Programm hägt durch waitFor() ! HILFE! Java Basics - Anfänger-Themen 10
G Meine erste IF Abfrage Java Basics - Anfänger-Themen 11
G wie meine java applikation installierbar machen? Java Basics - Anfänger-Themen 11
R BorderLayout macht meine Zeichnung kaputt Java Basics - Anfänger-Themen 14
A Parsen einer XML-Datei: Wo sind meine Start-Tags??? Java Basics - Anfänger-Themen 22
A Buttons für meine Homepage Java Basics - Anfänger-Themen 2
P meine java applets laufen nicht bei meinen freunden Java Basics - Anfänger-Themen 5
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
K Mein Pc will meine Programme nicht kompilieren Java Basics - Anfänger-Themen 2
J Warum funktioniert meine Umwandlung nicht? Java Basics - Anfänger-Themen 3
G Public class??? Findet meine Klasse nicht. Java Basics - Anfänger-Themen 5
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben