Java局部内部类

局部内部类是定义在方法内部的类,这个类只能在定义他的方法中可见。在局部内部类前不能用修饰符public、private和protected进行修饰。 可以定义与外部类同名的变量。如果内部类没有与外部类同名的变量,在内部类中可以直接访问外部类的实例变量。如果内部类中有与外部类同名的变量,直接用变量名访问的是内部类的变量,用this.变量名访问的也是内部类变量。

局部内部类是定义在方法块内部的类,这个类只能在定义他的方法中可见。局部内部类还有以下特性:

(1)在局部内部类前不能用修饰符publicprivateprotected进行修饰。 

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 = 男

业精于勤,荒于嬉。——韩愈《进学解》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号