第二节 局部内部类

第二节 局部内部类

非静态内部类扮演着非静态成员

局部内部类同样也是扮演着局部成员,但局部内部类实例不会因方法的结束而立即消失

局部内部类的定义与创建
public class CreateLocalInnerClass {
	public static void main(String[] args) {
		Outter o = new Outter();
		o.localInnerClass();
	}
}

class Outter{
	public void localInnerClass() {
		// 定义局部内部类
		class Inner {
			public Inner() {
				System.out.println("Inner 实例创建成功!");
			}
		}
		
		// 创建 Inner实例,方法与普通类实例创建一致
		Inner i = new Inner();
	}
}

/*
 * 执行结果
 * Inner 实例创建成功!
 */
局部内部类与局部变量之间的访问

局部内部类可以访问局部变量(某些版本的jdk无法访问,但可以访问 final 修饰的局部变量,因为局部变量随着方法结束而结束,而局部内部类实例不会如此)

同样,局部内部类可以访问外部类的字段与方法

public class TestLocalInnerClass {
	public static void main(String[] args) {
		Outter o = new Outter();
		o.localInnerClass();
	}
}

class Outter{
	public void localInnerClass() {
		// 定义局部变量
		int localVar = 520;
		
		// 定义局部内部类
		class Inner {
			public void printLocalVar() {
				// 访问局部变量
				System.out.println(localVar);
			}
		}
		
		new Inner().printLocalVar();;
	}
}

/*
 * 执行结果
 * 520
 */
局部内部类实例不会随着方法的运行结束而立即消失
// 定义接口的目的是能够接受Inner内部类的实例,当print方法结束,Inner类就失效了
interface ForInner{
	void print();
}

public class TestLocalInnerClass {
	public static void main(String[] args) {
		Outter o = new Outter();
		o.localInnerClass();
		o.i.print();
	}
}

class Outter{
	ForInner i = null;
	
	public void localInnerClass() {
		class Inner implements ForInner{
			public void print() {
				// 访问局部变量
				System.out.println("Calling print() successfully!");
			}
		}
		
        // 将实例对象给ForInner接口类型
		i = new Inner();
	}
}

/*
 * 执行结果
 * Calling print() successfully!
 */
静态方法中的局部内部类

当局部内部类处于静态方法中,就只能访问外部类中的静态方法和字段

public class CreateInnerClass {
	public static void main(String[] args) {
		Outter.createLocalInnerClass();
	}
}

class Outter{
	int x = 520;
	
	public static void createLocalInnerClass() {
		// 在静态方法中定义局部内部类
		class Inner{
			public void printNotStaticFiled() {
                // 访问非静态成员变量x
				System.out.println(x);
			}
		}
	}
}

/*
 * 错误
 * Cannot make a static reference to the non-static field x
 */

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值