No enclosing instance of type Class is accessible

12 Jun

Sáng nay ngồi code chơi gặp tình huống thế này.

public class A {
    public class B{
        private int num;
        public Date() {
            num = 0;

    public static void main(String[] args) {
        B b = new B();

Dính ngay lỗi:

No enclosing instance of type A is accessible. Must qualify the allocation with an enclosing instance of type A(e.g. B() where x is an instance of A)

Do lớp B là inner class của lớp A mà khi cần thì không thể truy xuất trực tiếp lớp B. Phải khi báo lớp A rồi hãy  gọi B thông qua A.

Lý giải sâu hơn:

static class B will make your program work.

As it is, you’ve got B as an inner class, which (by definition) is associated with a particular instance of A (even if it never uses or refers to it), which means it’s an error to say new B(); without having a particular A instance in scope.

If you declare it as a static class instead, then it’s a “nested” class, which doesn’t need a particular A instance.

Giải quyết:

Cách 1:
A a = new A();
B b = B();

Cách 2:
thêm từ khóa static lúc khai báo lớp B.

==> Thật là khó để tìm hiểu hết các vấn đề phải không bạn 🙂

Leave a comment

Posted by on 06/12/2013 in Java


Tags: , , , , , , , ,

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: