Methode einer Klasse in einer Klasse aufrufen
Hallo Leute!
Heut habe ich mal wieder ein Problem:
Ich habe in der Klasse "Haupt" eine reset() Funktion, die die reset() Funktionen der untergeordneten Klasse "starter" ausführen soll:
Doch es möchte nicht funktionieren (NullPointerException beim Aufruf der Funktion). Da ich Java noch nicht lange benutze und auch durch googeln nichts brauchbares rauskam, weiß ich jetzt nicht mehr weiter.
Welche Regel habe ich missachtet?
EDIT:
Man kann natürlich "starter" außerhalb von "Haupt" verschieben und dann in Haupt einfach
schreiben, aber ich sehe da 2 Probleme:
1. Die starter Klasse wäre public, was aus mehreren Gründen unpraktisch ist und
2. es wird dann auch unübersichtlich.
Mit freundlichen Grüßen
tomaschku
Heut habe ich mal wieder ein Problem:
Ich habe in der Klasse "Haupt" eine reset() Funktion, die die reset() Funktionen der untergeordneten Klasse "starter" ausführen soll:
public class Haupt {
Haupt() {
xyz = 0;
};
public class starter {
starter() {
ex = 0;
};
public void setEX(int _in) { ex= _in; };
public int getEX() { return ex; };
public void reset() {
ex= 0;
};
private int ex;
};
public void setXYZ(int _in) { xyz = _in; };
public int getXYZ() { return xyz; };
public void reset() {
xyz = 0;
starter.reset();
};
private int xyz;
};
Welche Regel habe ich missachtet?
EDIT:
Man kann natürlich "starter" außerhalb von "Haupt" verschieben und dann in Haupt einfach
starter Starter;
1. Die starter Klasse wäre public, was aus mehreren Gründen unpraktisch ist und
2. es wird dann auch unübersichtlich.
Mit freundlichen Grüßen
tomaschku
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 373760
Url: https://administrator.de/contentid/373760
Ausgedruckt am: 24.11.2024 um 18:11 Uhr
5 Kommentare
Neuester Kommentar
starter.reset();
Du rufst eine Funktion von einer Klasse auf von der es keine Instanz gibt. Also erst eine Instanz dieser Klasse erzeugen und dann die Funktion auf dieser Instanz aufrufen, oder eben die Klasse als static deklarieren dann ist ein direkter Aufruf dessen Member möglich.https://stackoverflow.com/questions/7486012/static-classes-in-java?utm_m ...
Hi,
ich kenne mich zwar nicht konkret mit Java aus. Aber ich denke, dass Du die Klasse "Starter" erst einmal instantiieren oder diese als "static" deklarieren musst.
Also entweder in Klasse "Haupt" ein
einbauen und dann aufrufen über
oder in Klasse "Starter"
deklarieren. Wobei ich jetzt aber keine Ahnung habe, ob und wie sich das bei Java mit diesem "static" verhält.
E.
ich kenne mich zwar nicht konkret mit Java aus. Aber ich denke, dass Du die Klasse "Starter" erst einmal instantiieren oder diese als "static" deklarieren musst.
Also entweder in Klasse "Haupt" ein
private Starter MyStarter;
...
MyStarter.Reset
...
public static void reset()
.....
deklarieren. Wobei ich jetzt aber keine Ahnung habe, ob und wie sich das bei Java mit diesem "static" verhält.
E.
Moin,
nochmal: "static" Methoden können nicht auf non-static Variablen/Methoden der Klasse zugreifen, da alle non-statics erst mit der Instanzierung der Klasse "entstehen". Ohne Instanzierung wird auch kein Konstruktur ausgeführt, also deine Varaible "myStaticNumber" nie mit der "1" gefüllt.
So in etwa:
nochmal: "static" Methoden können nicht auf non-static Variablen/Methoden der Klasse zugreifen, da alle non-statics erst mit der Instanzierung der Klasse "entstehen". Ohne Instanzierung wird auch kein Konstruktur ausgeführt, also deine Varaible "myStaticNumber" nie mit der "1" gefüllt.
So in etwa:
public final class MyStaticClass {
public static int myStaticMember = 1;
public static int staticMethod(int v) {
return MyStaticClass.myStaticMember ^ v;
}
}
system.out.println(MyStaticClass.myStaticMember);
system.out.println(MyStaticClass.staticMethod(5));