1.局部内部类:在方法中定义的内部类被称为局部内部类。局部内部类可以直接访问外部类的所有成员;不能使用访问修饰符和static修饰符;可以使用final修饰。作用域在方法体或者代码块中。如果外部类和局部内部类的成员重名时,默认就近原则,要访问外部类的成员可以使用外部类.this.成员;
public static void main(String[] args) { class Aa { int a; } class A extends Aa { int b; } A a1 = new A(); a1.a = 1; a1.b = 2; System.out.println(a1.a); System.out.println(a1.b); }
外部类和局部内部类的成员重名时:
public static void main(String[] args) { A a3=new A(); a3.b(); } } class A {//外部类 private int x = 10; private void a() { System.out.println("a()"); } public void b() { class A1 {//局部内部类 private int x = 20; public void a1() { System.out.println("x=" + x + " 外部类的x=" + A.this.x); a(); } } A1 a2 = new A1(); a2.a1(); } }
2.内部类标识符:每个类都会产生一个.class文件包含它们的Class对象信息,内部类也会生成一个.class文件。类文件的命名规则:外部类的名字,加上"$",在加上内部类的名字。如果内部类是匿名的,编译器就会产生一个数字作为其标识符;如果内部类嵌套在别的内部类中,直接将它们的名字加在其外部类标识符与"$"的后面。