匿名内部类中如果要使用外部定义的对象,参数对象应该为final型

package com.lwf.thinking.eight;
interface Constants{
	void getName();
}
public class AnonymousInner {
	public Constants cont(final String label){
		return new Constants(){
			private String name = label;
			public void getName(){
				System.out.println(name);
				System.out.println("cont");
			}
		};
	}
	
	private  class Inner implements Constants{
		public void getName(){
			System.out.println("Inner");
		}
	}
	
	public Constants getConstans(){
		Inner inner = new Inner();
		return inner;
	}
	
	
	public static void main(String[] args) {
		AnonymousInner out = new AnonymousInner();
		//匿名内部类实现
		Constants c = out.cont("good");
		c.getName();
		//内部类显式实现
		Constants c2 = out.getConstans();
		c2.getName();
		
	}
} 
 

上例中因为private String name = label;方法参数类型必须为final类型。

注意:如果匿名内部类中没有使用到这个参数,那么参数类型可以不为final型

你可能感兴趣的:(C++,c,C#)