24

假设我有一个 A 类:

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

以及该类的一个实例:

A anA = new A();

有没有办法覆盖method1()only for 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() {
    ...
  }
};

请注意,您想要做的与所谓的lambda非常接近,它应该在 Java SE 的下一个版本 8 中出现。

于 2012-08-13T07:03:09.110 回答
3

我喜欢用委托或“策略模式”来做这种事情。

public interface ADelegate {
   public void method1();
}

public class A {
    public A(){....}
    public ADelegate delegate;
    public final void method1() { delegate.method1(); }
};

A anA = new A();
anA.delegate = new ADelegate() {
   public void method1() { ... }
};
于 2014-03-10T01:30:21.020 回答