Java内部类总结之局部内部类和匿名内部类

        局部内部类:定义在方法中,可以看作是一个方法中的局部变量,只能在该方法中使用。

        测试代码如下:

/**
 * 定义一个局部内部类,可以将其看作一个方法中的局部变量,只能在该方法中使用
 * @author Rao
 *
 */
class LocalInner
{
	public void doSomething()
	{
		int a = 4;
		final int b = 5;
		
		class Inner3
		{
			public void test()
			{
				//不能访问外部方法中的非终态变量
//				System.out.println(a);
				
				//局部内部类中的方法只能访问其外部方法中声明的final类型的变量
				System.out.println(b);
			}
		}
		
		//只能在定义该局部内部类的外部方法里面生成其对象并调用其内部方法
		new Inner3().test();
		
//		上面的一句等价于以下两句
//		Inner3 inner3 = new Inner3();
//		inner3.test();
	}
}

public class LocalInnerClassTest
{
	public static void main(String[] args)
	{
		//实际上是执行了new Inner3().test();
		LocalInner localInner = new LocalInner();
		localInner.doSomething();
		
		//等价于上面的两句
		new LocalInner().doSomething();
	}
}

        匿名内部类:与局部内部类一样,匿名内部类也是定义在方法中的,但匿名内部类不是以‘局部变量’的形式出现,而是以某个方法的参数的形式出现,它没有特定的名字,运行时系统会自动为其取个别名。

        测试代码如下:

//匿名内部类
public class AnonymousInnerClassTest
{
	@SuppressWarnings("deprecation")//压制警告
	public String get(Date date)
	{
		return date.toLocaleString();
	}
	
	public static void main(String[] args)
	{
		AnonymousInnerClassTest test = new AnonymousInnerClassTest();
		
		String str = test.get(new Date());
		
		System.out.println(str);
		
		/**
		 * 同注释部分不同的是下面生成了一个匿名内部类,同局部内部类一样用在方法里面,
		 * 它会隐式地继承一个父类或实现一个接口,若Date是类就是继承,若是接口就是实现。
		 * 在这里这个匿名内部类继承了Date,故其继承了toLocaleString方法。
		 */
		String str2 = test.get(new Date() 
		{
			//在匿名内部类里重写toLocaleString方法
			@Override
			public String toLocaleString()
			{
				return "hello world";
			}
		});
		
		System.out.println(str2);
	}
}

参考文献:圣思园视频

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值