Ponieważ getText()
nie jest statyczny, nie można go wywołać z metody statycznej.
Aby zrozumieć dlaczego, musisz zrozumieć różnicę między nimi.
Metody instancji (niestatyczne) działają na obiektach określonego typu (klasy). Są one tworzone za pomocą nowego w następujący sposób:
SomeClass myObject = new SomeClass();
Aby wywołać metodę instancji, należy wywołać ją na instancji ( myObject
):
myObject.getText(...)
Jednak statyczną metodę / pole można wywołać tylko bezpośrednio na typie, powiedzmy w ten sposób:
Poprzednie stwierdzenie nie jest poprawne. Można również odwoływać się do pól statycznych z odniesieniem do obiektu, myObject.staticMethod()
ale jest to odradzane, ponieważ nie wyjaśnia, że są to zmienne klasowe.
... = SomeClass.final
Nie mogą ze sobą współpracować, ponieważ działają w różnych przestrzeniach danych (dane instancji i dane klas)
Spróbuję to wyjaśnić. Rozważ tę klasę (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Teraz mam następujący przypadek użycia:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Jakie są wartości?
Dobrze
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
Innymi słowy, TTT
jest to odniesienie, które jest wspólne dla wszystkich wystąpień typu. Więc nie ma sensu mówić
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Zatem pytanie brzmi: dlaczego TTT jest statyczne lub dlaczego getText () nie jest statyczne?
Usuń static
ten błąd i powinien minąć ten błąd - ale bez zrozumienia, co robi twój typ, to tylko przylepny plaster do następnego błędu. Jakie są wymagania getText()
, aby był on niestatyczny?