<pre name="code" class="java">JDesktopPane DESKTOP_PANE = new JDesktopPane() { protected void paintComponent(Graphics g) { g.drawImage(image, 0, 0, getWidth(), getHeight(), null); //g.drawImage(image, 0, 0, 500, 400, null); } };
一切正常。编译如下代码时,
JDesktopPane DESKTOP_PANE = new JDesktopPane() { //protected void paintComponent(Graphics g) { <pre name="code" class="java"> protected void paint(Graphics g) { g.drawImage(image, 0, 0, getWidth(), getHeight(), null); //g.drawImage(image, 0, 0, 500, 400, null); } };发生错误,提示如下信息:
Multiple markers at this line
- overrides javax.swing.JLayeredPane.paint
- Cannot reduce the visibility of the inherited method from
经查 JDesktopPane有paintComponet 和paint 方法。具体而言:
1. paintComponet继承自javax.swing.JComponent。原型: protected void paintComponent(Graphics g)
2. paint 继承自 javax.swing.JLayeredPane。 原型: public void paint(Graphics g)
发生错误的原因 是复写父类的方法,父类是 public 子类变为了protected,违反了 两同两小一大的 一大原则。故错误。修改为public 正确。
http://stackoverflow.com/questions/9035052/cannot-reduce-visibility-of-method-inherited-method-from-parent
http://stackoverflow.com/questions/6851612/java-access-modifiers-and-overriding-methods