điều tôi muốn biết là tại sao java cấm các trường / phương thức tĩnh bên trong các lớp bên trong
Bởi vì các lớp bên trong đó là các lớp bên trong "thể hiện". Có nghĩa là, chúng giống như một thuộc tính thể hiện của đối tượng bao quanh.
Vì chúng là các lớp "cá thể", không có ý nghĩa gì khi cho phép static
các tính năng, vì static
có nghĩa là hoạt động mà không có cá thể ngay từ đầu.
Nó giống như bạn cố gắng tạo một thuộc tính static / instance cùng một lúc.
Lấy ví dụ sau:
class Employee {
public String name;
}
Nếu bạn tạo hai trường hợp nhân viên:
Employee a = new Employee();
a.name = "Oscar";
Employee b = new Employee();
b.name = "jcyang";
Rõ ràng là tại sao mỗi cái lại có giá trị tài sản riêng name
, đúng không?
Điều tương tự cũng xảy ra với lớp bên trong; mỗi cá thể lớp bên trong độc lập với cá thể lớp bên trong khác.
Vì vậy, nếu bạn cố gắng tạo một counter
thuộc tính lớp, không có cách nào để chia sẻ giá trị đó trên hai trường hợp khác nhau.
class Employee {
public String name;
class InnerData {
static count;
}
}
Khi bạn tạo phiên bản a
và b
trong ví dụ trên, giá trị đúng cho biến static sẽ là count
bao nhiêu? Không thể xác định nó, vì sự tồn tại của InnerData
lớp phụ thuộc hoàn toàn vào từng đối tượng bao quanh.
Đó là lý do tại sao, khi lớp được khai báo là static
, nó không cần một cá thể sống nữa, để tự sống. Bây giờ không có phụ thuộc, bạn có thể tự do khai báo một thuộc tính tĩnh.
Tôi nghĩ điều này nghe có vẻ lặp lại nhưng nếu bạn nghĩ về sự khác biệt giữa các thuộc tính instance so với class, nó sẽ có ý nghĩa.