Vì getText()
là non-static nên bạn không thể gọi nó từ một phương thức static.
Để hiểu tại sao, bạn phải hiểu sự khác biệt giữa hai điều này.
Các phương thức Instance (không tĩnh) hoạt động trên các đối tượng thuộc một kiểu cụ thể (lớp). Chúng được tạo với cái mới như thế này:
SomeClass myObject = new SomeClass();
Để gọi một phương thức thể hiện, bạn gọi nó trên instance ( myObject
):
myObject.getText(...)
Tuy nhiên một phương pháp / lĩnh vực tĩnh có thể được gọi là chỉ vào loại trực tiếp, nói như thế này:
Những tuyên bố trước đó là không đúng. Người ta cũng có thể tham chiếu đến các trường tĩnh với một tham chiếu đối tượng như thế myObject.staticMethod()
nhưng điều này không được khuyến khích vì nó không làm rõ rằng chúng là các biến lớp.
... = SomeClass.final
Và cả hai không thể hoạt động cùng nhau khi chúng hoạt động trên các không gian dữ liệu khác nhau (dữ liệu phiên bản và dữ liệu lớp)
Hãy để tôi thử và giải thích. Hãy xem xét lớp này (mã psuedocode):
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = "0";
}
Bây giờ tôi có trường hợp sử dụng sau:
Test item1 = new Test();
item1.somedata = "200";
Test item2 = new Test();
Test.TTT = "1";
Các giá trị là gì?
Tốt
in item1 TTT = 1 and somedata = 200
in item2 TTT = 1 and somedata = 99
Nói cách khác, TTT
là một dữ liệu được chia sẻ bởi tất cả các trường hợp của loại. Vì vậy, không có ý nghĩa gì khi nói
class Test {
string somedata = "99";
string getText() { return somedata; }
static string TTT = getText(); // error there is is no somedata at this point
}
Vậy câu hỏi đặt ra là tại sao TTT tĩnh hoặc tại sao getText () không tĩnh?
Loại bỏ static
và nó sẽ vượt qua lỗi này - nhưng không hiểu loại của bạn là gì, nó chỉ là một lớp thạch cao dính cho đến lỗi tiếp theo. Yêu cầu của getText()
điều đó yêu cầu nó là không tĩnh là gì?