Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用基重绘方法?_Java_User Interface_Overriding_Method Hiding - Fatal编程技术网

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上的重绘时发生的事情,我不希望它被附加,我怎么能实现呢?