public class Person { public void hello() { System.out.println("我是Person"); } }
1 public class Main 2 { 3 /** 4 * 主函数,程序的入口 5 * @param args 6 */ 7 public static void main(String[] args) 8 { 9 final int num=90;//局部变量 10 11 //匿名类 12 Person p1=new Person(){ 13 14 @Override 15 public void hello() 16 { 17 System.out.println("我是匿名类"+" "+"外部类中的局部变量num="+num); 18 } 19 }; 20 21 p1.hello(); 22 } 23 }
显然内部类可以访问外部类的局部变量。
匿名类原理
原理解析:
Person p1=new Main$1();
而Main$1是个类,也就是匿名类,定义如下:
1 package yydl; 2 3 import java.io.PrintStream; 4 5 class Main$1 extends Person 6 { 7 public void hello() 8 { 9 System.out.println("我是匿名类 外部类中的局部变量num=90"); 10 } 11 }