假设我有一个A类:
public class A {
public A(){....}
public void method1() {...}
};
该类的一个实例:
A anA = new A();
有没有办法只为method1()
覆盖anA
?
这个问题出现在我写一个小绘画程序时,我必须多次扩展JPanel
类,只是为了对具有略微不同特征的不同面板进行微小的改动。
答案 0 :(得分:46)
您可以执行以下操作:
A anA = new A() {
public void method1() {
...
}
};
这与:
相同private static class myA extends A {
public void method1() {
...
}
}
A anA = new myA();
除非在这种情况下可以重复使用myA
。匿名课程无法做到这一点。
答案 1 :(得分:13)
只要您使用类A
的no-arg构造函数,就可以动态创建一个新的匿名类:
A anA = new A() {
@Override
public void method1() {
...
}
};
请注意,您要做的事情非常接近所谓的 lambda ,它应该出现在Java SE的下一个版本8中。
答案 2 :(得分: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() { ... }
};