我有两个班级:
public abstract class A extends JPanel {
@Override
public void repaint() {
super.repaint();
//my own implementation of A repaint
}
private void method2() {
//I need to call the repaint method of A here
}
}
public class B extends A {
@Override
public void repaint() {
super.repaint();
//my own implementation of B repaint
}
}
在一个简短的搜索中,我发现没有办法从基类中调用基本重写方法,问题是,如何在A中调用A的repaint
方法?我知道a可以创建基本方法,并且另一种方法明确地被扩展,如here所述,但是,因为是一个必须为所有子项共同的方法才能遵循java设计模式,最重要的是,如果另一个程序员继续我的工作,他会搜索重绘方法,任何建议这样做?
编辑:对不起,我忘了提到A级是抽象的,所以A的所有实例都是B(想象一下,A类的孩子多了,所以我不能完全在B中完成实现,因为我需要A)的所有子项中的那种行为,我也需要这个,因为我需要在执行的某些部分刷新A的视图,但我只是想画画A的各个部分没有刷新孩子们。
答案 0 :(得分:2)
我建议你不要覆盖repaint()
方法。您可能想要做的是实际覆盖paint(Graphics g)
方法。
答案 1 :(得分:1)
public abstract class A extends JFrame {
@Override
public void repaint() {
myRepaint();
}
private void myRepaint() {
super.repaint();
//my own implementation of A repaint
}
private void method2() {
myRepaint();
}
}
public class B extends A {
@Override
public void repaint() {
super.repaint();
//my own implementation of B repaint
}
}
答案 2 :(得分:0)
无法明确调用你的impl是一件好事。它允许子类将impl更改为他们自己的需要。允许它会破坏java的整个OO设计。
但是,你可以这样做:
public void repaint() {
repaintImpl();
}
private void repaintImpl() {
// whatever
}
并调用repaintImpl()
您想要的地方"调用基本重绘方法"。