Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich arbeite momentan an einem Programmierprojekt. Wir arbeiten mit KarelJ, was ja sehr ähnlich zu Java ist. Ich denke also, dass ich auch mit einer Lösung für ein vergleichbares Problem in Java viel anfangen könnte.
Und zwar wurde uns für das Projekt ein Grundgerüst zur Verfügung gestellt, in welchem unter anderem ein Array innerhalb eines Konstruktors der obersten Klasse erstellt wurde.
In anderen Klassen muss ich jedoch auch auf dieses Array zugreifen können. Das funktioniert allerdings nicht, ich bekomme die Fehlermeldung "Null Pointer Exception"! Wie sorge ich dafür, dass das Array ebenfalls an Unterklassen vererbt wird, sodass ich es in Methoden der Unterklassen nutzen kann?
Wenn das Array nur im Super-Konstruktor existiert, kommst du von "außen" nicht ohne weiteres heran. Würde es als Konstruktor-Argument übergeben, hast du Zugriff, aber es kommt auf dein Design ein, ob das sinnvoll ist:
Java:
public class Oberklasse {
public Oberklasse(int[] array) {
array[0] = 42;
}
}
public class Unterklasse extends Oberklasse {
public Unterklasse (int[] array) {
super(array);
System.out.println(array[0]); //--> 42
}
}
Hey,
ich würde gerne das Thema erneut aufgreifen, weil ich auch an diesem Punkt hänge und durch die Antworten zwar ein Stück weiter kam aber es immernoch zu einer Fehlermeldung kommt.
Ich habe das Array m dieses ist in meiner Oberklasse. In der Unterklasse möchte ich mit dem Array in der Methode arbeiten, darf dieses aber nicht neu definieren. Heißt ich muss es aus der Oberklasse aufrufen.
So sieht der Inhalt meines Konstruktors aus.
Java:
super(bla, blabla, blablabla, m);
Wenn ich das aber so schreibe, erhalte ich die fehlermeldung "Cannot refer to an instance field m while explicitly invoking a constructor"
Ich hoffe jemand versteht meine Frage und kann mir evtl. weiterhelfen.
Dann hast du m nicht als Parameter des Unterklassen-Konstruktors wie bei mir, sondern eben als Instanz-Feld der Unterklasse, und das bemeckert der Compiler (auch logisch, weil beim Konstruieren immer erst die Oberklasse dran ist). Für das Problem gibt es mehrere Möglichkeiten, z.B. das Feld gar nicht zu übergeben, sondern nur als public oder protected Member der Oberklasse zu definieren. Ob das sinnvoll ist, hängt natürlich vom Design ab. Etwas Background und ein wenig mehr Code lassen vielleicht aussagekräftigere Schlüsse zu...