Java 调用基重绘方法?
我有两门课:Java 调用基重绘方法?,java,user-interface,overriding,method-hiding,Java,User Interface,Overriding,Method Hiding,我有两门课: 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 her
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内部的repaint
方法?我知道a可以创建基本方法,以及前面提到的要显式扩展的另一个方法,但是,由于该方法必须是所有子级的通用方法,才能遵循java设计模式,最重要的是,如果另一个程序员继续我的工作,他将搜索重新绘制方法,有什么建议吗
编辑:很抱歉,我忘了提到类A是抽象的,所以A的所有实例也是B(想象一下,A类的子类更多,所以我不能完全在B中实现,因为我需要在A的所有子类中实现该行为),而且,我之所以需要它,是因为我需要在执行的某些部分刷新A的视图,但我只想绘制A的各个部分,而不刷新子部分。我建议您不要重写
repaint()
方法。您可能想做的是实际重写绘制(Graphics g)
方法。无法显式调用impl是一件好事。它允许子类根据自己的需要更改impl。允许它将破坏java的整个OO设计
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
}
}
但是,您可以这样做:
public void repaint() {
repaintImpl();
}
private void repaintImpl() {
// whatever
}
然后调用
repaimpl()
在你想“调用基本重绘方法”的地方。我明白你为什么这么说,我已经这么做了,问题是我想在执行的某个时候刷新面板,(java建议不要调用paintComponent方法(这很有效,但不好,(我知道你也不建议我这么做)只需重写paint或paintComponent方法并调用repaint()是的,但我称之为A中的重绘,我只希望A中的绘画部分被称为A和B中的一个,这就是我称之为A上的重绘时发生的事情,我不希望它被附加,我怎么能实现呢?