假设我有一个 A 类:
public class A {
public A(){....}
public void method1() {...}
};
以及该类的一个实例:
A anA = new A();
有没有办法覆盖method1()
only for anA
?当我编写一个小型绘画程序时,就会出现这个问题,在该程序中,我必须JPanel
多次扩展类,以便对具有略微不同特征的不同面板进行细微更改。
假设我有一个 A 类:
public class A {
public A(){....}
public void method1() {...}
};
以及该类的一个实例:
A anA = new A();
有没有办法覆盖method1()
only for anA
?当我编写一个小型绘画程序时,就会出现这个问题,在该程序中,我必须JPanel
多次扩展类,以便对具有略微不同特征的不同面板进行细微更改。
您可以执行以下操作:
A anA = new A() {
public void method1() {
...
}
};
这与以下内容相同:
private static class myA extends A {
public void method1() {
...
}
}
A anA = new myA();
只有在这种情况下myA
可以重复使用的例外。这对于匿名类是不可能的。
只要您使用类的无参数构造函数,就可以动态创建一个新的匿名类A
:
A anA = new A() {
@Override
public void method1() {
...
}
};
请注意,您想要做的与所谓的lambda非常接近,它应该在 Java SE 的下一个版本 8 中出现。
我喜欢用委托或“策略模式”来做这种事情。
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() { ... }
};