1. 程式人生 > >如何寫內部類,內部類中如何呼叫。

如何寫內部類,內部類中如何呼叫。

錯誤資訊:

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

is an instance of Test).

    public class Test {  
      
        public static void main(String[] args) {  
            Test test = new Test();  
            Beans xm = test.new Beans();  
      
        }  
        public class Beans{  
              
        }  
      
    }  

x指代我寫的那個內部類。

根據提示,沒有可訪問的內部類Test的例項,必須分配一個合適的內部類Test的例項(如x.new A(),x必須是Test的例項。)看著這句提示,我就納悶了,我已經用new例項化了這個類,為什麼還不行呢。

於是百度谷歌了一下相關資料。原來我寫的內部類是動態的,也就是開頭以public class開頭。而主程式是public static class main。在Java中,類中的靜態方法不能直接呼叫動態方法。只有將某個內部類修飾為靜態類,然後才能夠在靜態類中呼叫該類的成員變數與成員方法。所以解決辦法是將public class改為public static class.

或者改成上面的new Test().new Beans():

當然如果想看起來不這麼怪異,也可以寫成另外加一個方法來例項化這個內部類,再用外部類的例項來呼叫方法