1

如果给您一个名为 BouncyFace 的类,该类具有以下代码:

    import javax.swing.*;
    import java.awt.*;
    public class BouncyFace extends JComponent  {
        protected int xDelta = 1;
        protected int yDelta = 1;
        private Color fleshColor;
        public BouncyFace(int x, int y, int side)  {
        super();
        setBounds(x, y, side, side);
        fleshColor = new Color(214,157,106);
        setBackground(fleshColor);
        setForeground(Color.black);
    }


      public void paint(Graphics g)  {
        g.setColor( getBackground() );
        g.fillOval(0, 0, getWidth()-1, getHeight()-1);
   }

    public void move() {
       if (getParent() != null) {
       setLocation( getX()+xDelta, getY()+yDelta );
       if ((xDelta > 0) && (getX()+getWidth() > getParent().getWidth()) ) {
           xDelta = -Math.abs(xDelta);
       } else if ((xDelta < 0) && (getX() < 0)) {
           xDelta = Math.abs(xDelta);
       }
       if ((yDelta > 0) && (getY()+getHeight() > getParent().getHeight()) ) {
           yDelta = -Math.abs(yDelta);
       } else if ((yDelta < 0) && (getY() < 0)) {
           yDelta = Math.abs(yDelta);
       }           
       repaint();
   }

你被告知要创建一个更改paint() 的类,这样BouncyFace 不仅可以绘制一个椭圆,还可以在其中绘制两个小椭圆,你会怎么做呢?

编辑:

好的,所以这是我的新课程-

    import javax.swing.*;
    import java.awt.*;
    public class Features extends BouncyFace
    {
      public Features(int x,int y, int side)
     {
        super(x,y,side);
        //setBounds(x,y,side,side);
    }


     public void paint(Graphics g)
     {
       super.paint(g);
       //g.setColor( getBackground() );
       g.drawOval(10, 10, getWidth(), getHeight());

     }
  }

但是,我相信这会覆盖旧油漆,因为当我在 Driver 中执行此操作时,它只会向我显示新的椭圆形

私人特征眼睛;

眼睛=新功能(10,10,10);

这与我设置的参数有关吗?抱歉问了这么多,我只是想用多态性来理解继承,我完全被困在这里,认为没有必要开始一个新问题。

感谢您对这个问题的所有见解。我已经解决了它,现在正在解决另一个问题。感谢stackoverflow社区。

4

1 回答 1

0

(我)我会首先创建一个扩展 BouncyFace 的新类,然后重写它的 paint(...) 方法。别忘了也调用 super 的 paint 方法。当你尝试这个时会发生什么?

(你)我做到了。但是,我首先不知道要在油漆中添加什么,以便将其添加到旧油漆上,而不是将其完全更改为新类别中的油漆而不保留旧油漆。我不知道。

你需要确保调用super.paint(g)你的新类的paint(Graphics g)覆盖。这将让它显示原来的椭圆形。

于 2013-04-26T02:17:37.030 回答