Оскільки getText()
це нестатично, ви не можете його викликати статичним методом.
Щоб зрозуміти чому, ви повинні зрозуміти різницю між ними.
Інстанційні (нестатичні) методи працюють на об'єктах певного типу (класу). Вони створені таким чином:
SomeClass myObject = new SomeClass();
Щоб викликати метод екземпляра, ви викликаєте його в instanc ( myObject
):
myObject.getText(...)
Однак статичний метод / поле можна викликати тільки на тип безпосередньо, скажімо так:
Попереднє твердження невірне. Можна також посилатися на статичні поля з посиланням на об'єкт, як myObject.staticMethod()
це, але це не рекомендується, оскільки це не дає зрозуміти, що вони є змінними класу.
... = SomeClass.final
І вони не можуть працювати разом, оскільки вони працюють в різних просторах даних (дані екземпляра та дані класу)
Дозвольте спробувати і пояснити. Розглянемо цей клас (psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Тепер у мене є такий випадок використання:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Які значення?
Ну
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
Іншими словами, TTT
це дата, яку поділяють усі екземпляри типу. Тому немає сенсу говорити
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Отже, питання полягає в тому, чому TTT статичний або чому getText () не є статичним?
Видаліть static
і вона повинна пройти цю помилку, але, не розуміючи, що робить ваш тип, це лише прилипання штукатурки до наступної помилки. Які вимоги getText()
вимагають від нього нестатичності?