天天看點

在方法中定義内部類

如下所示代碼為在方法内部定義一個内部類:

package inner;

public class FunOuter

{

   int out_x = 100;

   public void test(){

     class Inner{

       String inner_x = "x";

       void display(){

         System.out.println(out_x);

       }

     }

     Inner inner = new Inner();

     inner.display();

   }

   public void showStr(String str)  {

     // public String str1 = "test Inner";// 不可定義, 隻允許final修飾

     // static String str4 = "static Str";// 不可定義, 隻允許final修飾

     String str2 = "test Inner";

     final String str3 = "final Str";

     class InnerTwo{

       public void testPrint(){

         System.out.println(out_x);  // 可直接通路外部類的變量

         // System.out.println(str); // 不可通路本方法内部的非final變量

         // System.out.println(str4); // 不可通路本方法内部的非final變量

System.out.println(str2);

         System.out.println(str3); // 隻可通路本方法的final型變量成員

       }

     }

     InnerTwo innerTwo = new InnerTwo();

     innerTwo.testPrint();

   }

   public void use()  {

     // Inner innerObj = new Inner();//此時Inner己不可見了

     // System.out.println(Inner.x);//此時Inner己不可見了

   }

   public static void main(String[] args){

     FunOuter outer = new FunOuter();

     outer.test();

   }

}

從上面的例程我們可以看出定義在方法内部的内部類的可見性更小, 它隻在方法内部可見, 在外部類(及外部類的其它方法中)中都不可見了.同時,方法内的内部類隻能通路所在方法的final型成員.同時另一個需引起注意的是方法内部定義成員, 隻允許final修飾或不加修飾符, 其它像static等均不可用.