1

我有两节课:

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 可以创建基本方法,而另一种方法可以显式扩展,如此处所述,但是,因为是一个必须对所有孩子通用的方法,才能遵循 java 设计模式,并且最最重要的是,如果另一个程序员继续我的工作,他会寻找重绘方法,有什么建议吗?

编辑:对不起,我忘了提到 A 类是抽象的,所以 A 的所有实例也是 B (想象一下,A 类的孩子更多,所以我不能完全在 B 中完成实现,因为我需要 A) 的所有子项中的这种行为,而且,我需要这样做是因为我需要在执行的某些部分刷新 A 的视图,但我只想绘制 A 的相应部分而不刷新这些孩子。

4

3 回答 3

2

我建议您不要覆盖该repaint()方法。您可能想要做的是实际覆盖该paint(Graphics g)方法。

于 2012-11-23T15:16:28.160 回答
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
    }
}
于 2012-11-23T15:24:42.780 回答
0

无法显式调用您的 impl 是一件好事。它允许子类根据自己的需要更改 impl。允许它会破坏 java 的整个 OO 设计。

但是,您可以这样做:

public void repaint() {
    repaintImpl();
}

private void repaintImpl() {
    // whatever
}

并调用repaintImpl()您想要“调用基本重绘方法”的位置。

于 2012-11-23T15:25:48.900 回答