调用基础重绘方法?

时间:2012-11-23 15:11:31

标签: java user-interface override 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 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的各个部分没有刷新孩子们。

3 个答案:

答案 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()您想要的地方"调用基本重绘方法"。