Aufrufen von nicht-statischen Methoden von anderen Klassen
Mache ich meine Aufgabe, und über einige Fehler. In einer Klasse habe ich diese Methode:
public class Class1{
public static boolean winningRecord(){
final int WINNING_RECORD;
return Class2.getPoints() > WINNING_RECORD;
}
}
class Class2{
int wins = 0;
public int getPoints(){
return wins; //More to it but to keep it simple I'll leave that out
}
}
Jetzt bin ich immer den Fehler "Non-Static method cannot be referenced from a static context...", also machte ich getPoints() eine statische Methode, die die Variablen statische als auch, und es funktioniert. Aber in einer anderen Methode für den Druck von Objekten funktioniert es nicht (ich glaube, es ist wegen dem static-Schlüsselwort).
Also meine Frage nach all diesem gibt es eine Möglichkeit, eine Methode aufrufen, ohne eine Instanz der zweiten Klasse? Dies ist die Allgemeine Idee, die code, die ich habe, es sollte Ihnen eine Vorstellung davon, was Los ist, wenn nicht werde ich mehr hinzuzufügen, um es.
- Nein, es ist nicht möglich.
getPoints
können nicht statisch sein, es sei dennwins
ist statisch. Und wennwins
statisch ist, dann wird es immer nur eine Kopiewins
, geteilt durch die gesamte Anwendung. Sie müssen entscheiden, wie viele Kopien vonwins
Sie brauchen. (Und "singleton' s beiseite, es ist generell albern, müssen Sie eine Klasse nur für die Speicherung einer statischen Daten Wert.)- Ich schlage vor, Sie setzen Sie auf der Tastatur nach unten, und stattdessen Lesen Sie ein gutes Buch über Java. Wenn Sie verstehen, was
static
bedeutet, Sie sollten in der Lage sein zu verstehen, warum Sie diese Fehler - und der am besten geeignete Weg, um Sie zu beheben. - Sie müssen deutlich machen, "Aber in einer anderen Methode für den Druck von Objekten funktioniert es nicht (ich glaube, es ist wegen dem static-Schlüsselwort)." machen getPoints() static sollte nicht in sich selbst ein problem.
- Ich habe eine andere Methode, die druckt Objekte, aber wenn es geht, um drucken Sie die Variablen Werte, die es nur Ausgänge der gleichen Sache, die für die einzelnen Objekte.
- Was Sie fordern ist rein bezogen auf das Verständnis von OOPS Grundlagen.
- Class2 hat eine Instanz-variable namens gewinnt.
getPoints()
gibt, dass die Instanz-variable, wenn Sie noch keine Instanz von Class2 dann macht es keinen Sinn, dass der Aufruf der Methode statisch würde nie funktionieren, daher der Grund, warum Sie den Fehler. Wie @JonSkeet sagte, machen Sie sich vertraut mit dem, wasstatic
bedeutet. Es zahlt große Dividenden. - Hat Ihr real-code geben Sie einen Wert für WINNING_RECORD? Wie es scheint, sollte es nicht kompilieren, ohne dass.
final int WINNING_RECORD = 232;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ein-Schlüssel-Konzept in java ist die Idee der Instanziierung. Eine Klassendefinition hat, alle Regeln für eine Art von Objekt. Jede Instanz des Objekts Folgen den gleichen Regeln. Wenn ich zum Beispiel definieren,
Dann hat das system-code für Dinge genannt
Ball
s mit derbounce
Wenn ich will zwei Kugeln...
und ich kann hüpfen Sie alle möchte ich
aber ich kann nicht sagen,
weil das lässt mein system mit der Frage "Welcher ball?"
static
Methoden und Variablen sind nicht verbunden mit bestimmten Instanzen.Beispiel:
Die statische Methode angewendet, um alle Werwölfe so heißt es, in der Klasse:
Den nicht-statischen (Instanz -) Methode angewendet, die zu einer bestimmten Werwolf-so heißt es in einer Instanz.
Jeff ist der Werwolf. Chuck ist die person, die er isst.
Versuchen Sie, ignorieren Sie die grausame Kommentare. Wir begannen alle irgendwo.
In Ihrem code
winningRecord()
ist spezifisch für die KlasseClass1
sich durch statische klappenmechanismus.in der Erwägung, dass
getPoints()
im Class2 ist spezifisch für eine Instanz der KlasseClass2
Ist es nicht möglich, den Zugriff auf eine nicht statische Methode aus einer statischen Kontext.