局部内部类是定义在方法块内部的类,这个类只能在定义他的方法中可见。局部内部类还有以下特性:
(1)在局部内部类前不能用修饰符public、private和protected进行修饰。
public void t() {
// 错误
private class Inner { ... }
// 错误
public class Inner { ... }
// 错误
protected class Inner { ... }
}(2)可以定义与外部类同名的变量。如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量。如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量,用this.变量名访问的是内部类变量。用外部类名.this.内部类变量名访问的是外部类变量。
public class InnerClassTest06 {
private String name = "Outter Name";
public static void main(String[] args) {
InnerClassTest06 test = new InnerClassTest06();
test.t();
}
public void t() {
final int age = 20;
class Inner {
private String name = "Inner Name";
public void show() {
System.out.println("age = " + age);
System.out.println("name = " + name);
System.out.println("name = " + InnerClassTest06.this.name);
}
}
new Inner().show();
}
}输出结果:
age = 20
name = Inner Name
name = Outter Name
(3)不可以定义静态变量和方法;
public void t() {
class Inner {
// 错误
public static name = "NAME";
}
}(4)可以访问外部类的局部变量(即方法内的变量),但是变量必须是final的。如下,在t()方法内部定义了一个final int age变量,然后在局部内部类中输出。
public class InnerClassTest06 {
public static void main(String[] args) {
InnerClassTest06 test = new InnerClassTest06();
test.t();
}
public void t() {
final int age = 20;
class Inner {
public void show() {
System.out.println("age = " + age);
}
}
new Inner().show();
}
}输出结果:
age = 20
(5)可以访问外部类的所有成员。如下在外围类定义了private、public、protected和友好型修饰符变量,然后使用局部内部类将这些变量的值输出。
public class InnerClassTest06 {
public int age = 23;
private String name = "Outter Name";
protected String pro = "pro Test";
String sex = "男";
public static void main(String[] args) {
InnerClassTest06 test = new InnerClassTest06();
test.t();
}
public void t() {
class Inner {
public void show() {
System.out.println("age = " + age);
System.out.println("name = " + name);
System.out.println("pro = " + pro);
System.out.println("sex = " + sex);
}
}
new Inner().show();
}
}输出结果如下:
age = 23
name = Outter Name
pro = pro Test
sex = 男