paint()方法中不是用一个抽象类的实例做为参数
请看:
public abstract class A
{
  public abstract void a();
}
class B extend A
{
  public void a()
  {
    System.out.println("B");
  }
}
class C
{
  public void c(A aa)
  {
   .....
  }
}
class D
{
  C cc = new C();
  A bb = new B();
  cc.c(bb);  
}

解决方案 »

  1.   

    to kare(小李飞刀的飞,小李飞刀的刀。):
    非常感谢,再你给的例子中,B实现了A的方法,在D中A bb创建的实际上是B的一个实例,
    然后用C的方法c()处理bb。你再看看我在书上看到的那个例子,实际并没有在哪儿实现Graphics的方法,运行的时候,
    也没问题。不只是为什么?我会再加分
      

  2.   

    大部分容器类都有getGraphics()方法,他返回的是实现了Graphics的抽象方法的一个Graphics的扩展类
    比如DateFormat是一个抽象类,系统有提供了SimpleDateFormat类,你可以根据自己的需要实现DateFormat类的抽象方法,也可简单的用SimpleDateFormat类
      

  3.   

    因为它实际传入(即g)的是一个继承Graphics的非抽象化的子类的实例。
      

  4.   

    看看这个,下面的两个类就是真正的参数,他们都是继承Graphices类。
    java.awt 
    Class Graphics
    java.lang.Object
      |
      +--java.awt.GraphicsDirect Known Subclasses: 
    DebugGraphics, Graphics2D 
      

  5.   

    public void paint(Graphics g)
        {
            g.fillRect(30,10,200,100);
            g.clearRect(50,30,70,50);
            g.drawRcet(60,50,40,20);
            g.drawLine(10,55,250,55);
        }
    } 是典型的up casting技术
      

  6.   

    的确是上溯造型,Graphics 是抽象类,但g是它的子类的实例。
    比如,交通工具是抽象类,汽车是其子类
    那么可用:交通工具 aa=new 汽车();
    来实例化汽车,明白吗??
      

  7.   

    Graphics 是抽象类,但g是它的子类的实例。
    可是我们并没有指定到底用哪一个具体的子类,skyyong说它的直接子类有:
    DebugGraphics, Graphics2D 那我们的g到底是哪一个字类的实例呢?
    sorry,我很笨,请不吝赐教
      

  8.   


    Graphics 是抽象类,但g是它的子类的实例。
    可是我们并没有指定到底用哪一个具体的子类,skyyong说它的直接子类有:
    DebugGraphics, Graphics2D 那我们的g到底是哪一个字类的实例呢?
    sorry,我很笨,请不吝赐教”到底是哪个子类的实例就要看你调用paint方法的时候传什么参数了。
      

  9.   

    这是Component中的方法     
        /**
         * Creates a graphics context for this component. This method will
         * return <code>null</code> if this component is currently not
         * displayable.
         * @return A graphics context for this component, or <code>null</code>
         *             if it has none.
         * @see       java.awt.Component#paint
         * @since     JDK1.0
         */
        public Graphics getGraphics() {
    if (peer instanceof java.awt.peer.LightweightPeer) {
        // This is for a lightweight component, need to
        // translate coordinate spaces and clip relative
        // to the parent.
        if (parent == null) return null;
        Graphics g = parent.getGraphics();
        if (g == null) return null;
        if (g instanceof ConstrainableGraphics) {
    ((ConstrainableGraphics) g).constrain(x, y, width, height);
        } else {
    g.translate(x,y);
    g.setClip(0, 0, width, height);
        }
        g.setFont(getFont());
        return g;
    } else {
        ComponentPeer peer = this.peer;
        return (peer != null) ? peer.getGraphics() : null;
    }
        }