在匿名内部类中使用局部内部类

在JDK8 以前的版本中使用匿名内部类时,在匿名内部类中使用局部变量时,局部变量必须被final修饰,否则会报错。在JDK8 以后及JDK8 在匿名内部类中使用局部变量时,不必添加final修饰,程序自动为这个变量添加了final

                interface Product{
	            public double getMoney();
	            public String getName();
                }                
            
public class Cow {
	private static Integer weight;
	public Cow(Integer weight){
		this.weight = weight;
	}
	public Cow(){}
	static class CowLeg{
		private String color;
		public CowLeg(String color){
			this.color = color;
		}
		public CowLeg(){}
		public void info(){
			System.out.println("weight:"+weight+" "+ "color:"+color);
		}
		
	}
	 class CowLeg2{
		
		
	}
	public void test(){
		CowLeg cowLeg = new CowLeg("黑");
		cowLeg.info();
		new CowLeg2();
	}
	public void test1(Product p){
		System.out.println("买了"+p.getName()+",花了"+p.getMoney());
	}
	public static void main(String[] args){
		Cow cow = new Cow(13);
		cow.test();
		
		final int a = 0;
		
		CowLeg cowLeg = new CowLeg("黑"); 
		cowLeg.info();
		new Cow().test1(new Product(){

			
			@Override
			public double getMoney() {
				// TODO Auto-generated method stub
				System.out.println(a);
				return 12.3;
			}

			@Override
			public String getName() {
				// TODO Auto-generated method stub
				return "水果";
			}
			
		});
	}
	
	
}

在这段程序中,Product本来是一个接口,接口中定义这两个抽象方法,在实现接口,创建对象使用匿名内部类,在匿名内部类中使用局部内部类 a,因为JDK是8之前的版本,所以要在前面加上修饰final

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值