再學Java 之 解決No enclosing instance of type * is accessible

scutwang發表於2014-04-20

深夜,臨睡前寫了個小程式,出了點小問題

public class Test_drive {
    
    public static void main(String[] args){
        A a = new A();              //報錯
        B b = new B();              //報錯
        System.out.println(b instanceof A);
    }
    class A{
        int a;
    }
    class B extends A{
    }
}

上面兩個語句報錯資訊如下:

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

 

(1)在stackoverflow上面查詢到了類似的問題:http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible/9560633#9560633

 

(2)下面簡單說一下我的理解:

  在這裡,A和B都是Test_drive的內部類,類似於普通的例項變數,如果類的靜態方法不可以直接呼叫類的例項變數。在這裡,內部類不是靜態的內部類,所以,直接賦值(即例項化內部類),所以程式報錯。

 

(3)解決的方法可以有以下兩種:

  (1)將內部類定義為static,即為靜態類

  (2)將A a = new A();B b = new B();改為:

Test_drive td = new Test_drive();
A a = td.new A();
B b = td.new B();

 

附註:寫到這裡好睏。如果大家有更好的理解,請在下面留言。謝謝。

相關文章