基础问题:final问题.高手指教!!谢谢!~~
这是包含匿名内部类的一段代码:
public class test
{
public static void main(String[] args) {
innerB obj=new innerB(); //生成innerB 类对象
(1) Iner obj1=obj.d("gongchang"); //获得接口Iner 的一个引用
obj1.f(); //调用内部类中的f()
(2) obj1=obj.d("wangwei");
obj1.f();
}
}
interface Iner{ public void f( );} //接口
class innerB //类innerB
{
String s1="dd";
public Iner d(final String s2) //获取接口引用
{
return new Iner(){ //匿名内部类
public void f()
{
System.out.println(s1);
System.out.println(s2);
}
};
}
}
问题:
1.为什么s2一定要定义为final?如果不是final,会提示:cannot refer to a non-final variable inside an inner class defined in a different method
而s1没有这样的强制要求?
2.既然s2必须是final,也就是赋值之后不能再改变,为什么我可以调用两次(1)(2)?这是不是相当于给s2赋值两次?
请高手解惑!!!谢谢!~~