椭圆形多态性

时间:2013-04-26 02:13:51

标签: java class polymorphism

如果您获得了一个名为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());

     }
  }

然而,我相信这会覆盖旧油漆,因为当我在驱动程序中执行此操作时,它只显示新的椭圆形

私人特色眼睛;

eyes = new Features(10,10,10);

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

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

1 个答案:

答案 0 :(得分:0)

  

(我)我首先创建一个扩展BouncyFace的新类,然后覆盖它的paint(...)方法。不要忘记调用super的paint方法。你试试这个会发生什么?

     

(你)我做到了。然而,我首先不知道要把什么涂在油漆上,以便它添加到旧油漆上而不是完全改变它到新类中的油漆中而不保留旧油漆。我不知道。

您需要确保在新班级的super.paint(g)覆盖中拨打paint(Graphics g)。这将显示原始的椭圆形。