Bạn đã khai báo lớp Thing
là một lớp bên trong không tĩnh. Điều đó có nghĩa là nó phải được liên kết với một thể hiện của Hello
lớp.
Trong mã của bạn, bạn đang cố gắng tạo một phiên bản Thing
từ bối cảnh tĩnh. Đó là những gì trình biên dịch đang phàn nàn về.
Có một vài giải pháp có thể. Giải pháp nào để sử dụng phụ thuộc vào những gì bạn muốn đạt được.
Di chuyển Thing
ra khỏi Hello
lớp.
Thay đổi Thing
thành một static
lớp lồng nhau.
static class Thing
Tạo một thể hiện Hello
trước khi tạo một thể hiện của Thing
.
public static void main(String[] args)
{
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P
}
Giải pháp cuối cùng (một lớp lồng không tĩnh ) sẽ là bắt buộc nếu bất kỳ trường hợp nào Thing
phụ thuộc vào một thể Hello
hiện có ý nghĩa. Ví dụ: nếu chúng ta có:
public class Hello {
public int enormous;
public Hello(int n) {
enormous = n;
}
public class Thing {
public int size;
public Thing(int m) {
if (m > enormous)
size = enormous;
else
size = m;
}
}
...
}
bất kỳ nỗ lực thô nào để tạo một đối tượng của lớp Thing
, như trong:
Thing t = new Thing(31);
sẽ có vấn đề, vì sẽ không có enormous
giá trị rõ ràng để kiểm tra 31 chống lại nó. Một thể hiện h
của Hello
lớp bên ngoài là cần thiết để cung cấp h.enormous
giá trị này :
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Bởi vì nó không có nghĩa là Thing
nếu nó không có a Hello
.
Để biết thêm thông tin về các lớp lồng nhau / bên trong:
Các lớp lồng nhau (Các hướng dẫn Java)