24

クラスAがあるとします。

public class A {
    public A(){....}
    public void method1() {...}
};

そして、そのクラスのインスタンス:

A anA = new A();

method1()のみをオーバーライドする方法はありますanAか?JPanelこの質問は、わずかに異なる特性を持つさまざまなパネルに小さな変更を加えるためだけにクラスを数回拡張する必要がある小さなペイントプログラムを作成するときに発生します。

4

3 に答える 3

47

次のことができます。

A anA = new A() {
    public void method1() {
        ...
    }
};

これは次と同じです:

private static class myA extends A {
    public void method1() {
        ...
    }
}

A anA = new myA();

myAこの場合のみ再利用できることを除いて。これは匿名クラスでは不可能です。

于 2012-08-13T06:35:12.953 に答える
15

クラスの引数なしのコンストラクターを使用している限り、その場で新しい匿名クラスを作成できますA

A anA = new A() {

  @Override
  public void method1() {
    ...
  }
};

あなたがしたいことは、ラムダとして知られているものに非常に近いことに注意してください。これは、Java SE の次のリリース 8 で提供される予定です。

于 2012-08-13T07:03:09.110 に答える