深夜,臨睡前寫了個小程式,出了點小問題
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();
附註:寫到這裡好睏。如果大家有更好的理解,請在下面留言。謝謝。