どうも無理やり押し込んだ感のある文法が好きになれない。
この場合、ローカル変数 localnum を
感覚的に参照出来るそうに見えるが、実際はできない。
その点、C#は、デリゲートやアクセッサがいい役割を果たしていて
かなり感覚的に読みやすいコードが書けるのでオススメだ。
public class Main implements InterfaceA { private int classnum = 10; public void Test() { // パッと見でローカル変数も送れそうな感じがするが送れない int localnum = 10; // その場でインターフェースを実装 ClassA a = new ClassA( new InterfaceA() { // 実装2 @Override public void play() { //System.out.println("実装1, num=" + localnum); // 当然ローカル変数は NG System.out.println("実装1, num=" + classnum); } }); a.play(); // 実装1がよばれる // 通常 ClassA b = new ClassA(); b.setInterfaceA(this); b.play(); // 実装2がよばれる } @Override public void play() { System.out.println("実装2, num=" + classnum); } }※補足 最近知ったのですが、C# 2.0 では匿名メソッドという機能が用意されていて 上記と似たようなかたちで、delegateに直接関数を実装できるようです。