Java匿名内部类

定义:隐藏实现细节的内部类,而不像其他类,可以任意调用构造器创建实例(有构造器权限)。

特点:

1、默认继承或实现某个类(Object不算)。

     

	public void testMethod() {
		
		//匿名内部类,它继承了类Test2
		new Test2() {
			
		};
	}
	
	/**
	 * 内部类
	 * @author Administrator
	 *
	 */
	class Test2 {
		
		public void test() {
			// ......
		}
		
	}

 

当把test2改为final时,它不可被继承。所以以它实现匿名内部类会有编译错误,从这也佐证了匿名内部类会继承或实现那个new 关键字后面的那个类(接口)。

	public void testMethod() {
		
		//匿名内部类,它继承了类Test2
		//<span style="color:#ff6666;">这里有编译错误,提示final类不可被继承
</span>		new Test2() {
			
		};
	}
	
	/**
	 * 内部类
	 * @author Administrator
	 *
	 */
	final class Test2 {
		
		public void test() {
			// ......
		}
		
	}

 

2、匿名内部类可以直接构建接口的实例,并实现方法细节

	public void testMethod() {
		
		//直接创建接口的实例
		new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				
			}
			
		};
	}

 

3、匿名内部类可以访问外部类的私有成员属性

   

public class Synchronized {

	final private String string = "hello";

	public void testMethod() {
		
		//直接创建接口的实例
		new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				String ss = string;
			}
			
		};
	}
	
	/**
	 * 内部类
	 * @author Administrator
	 *
	 */
	final class Test2 {
		
		public void test() {
			// ......
		}
		
	}
	
	
}


4、JDK 1.8之后内部类访问方法局部变量时,final关键字可以省略,但是它在内部类里面还是默认是final的,不能改变值或引用

	public void testMethod(String str) {
		
		//没有关系,不在内部类里面,此时不会认为是final
		str = "1";
		
		//直接创建接口的实例
		new Runnable() {

			@Override
			public void run() {
				
				//<span style="color:#ff0000;">编译错误,提示str是final变量,不可改变</span>
				str = "";
			}
			
		};
	}





 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值