Javaでクロージャ

[id:lethevert:20050824:p1]
せっかくなんで、Javaのことも。
Javaクロージャと同等のことをするには、無名クラスを使えばいいです。でも、ちょっと記述が面倒だし、ごちゃごちゃとした印象はあります。

abstract class Functor{
  abstract void execute();
}

public class ObjectA{
  PrintStream out;

  void doExecute(Functor func){
    func.execute();
  }

  void writeLine(int _param){
    final int param = _param;
    doExecute(
      new Functor() {
        void execute(){
          out.println(param);
        }
      }
    );
  }
}

外側の変数にも触れます。ただし、メソッド内の変数は、final宣言しないとダメです。
ところで、メソッド内の変数をfinal宣言する必要があるというのは、何故なんでしょう? 変数の指すポインタが変わらないことを明示的にするため?
(ところで、関数内のfinalを、一瞬、Cの関数内のstaticと混同して、複数インスタンスの場合は動作がおかしくならないか?と悩んでしまった・・・)