如果一个类继承Applet她有paint方法
public void paint(Graphics g)
我查过了Grahpics是抽象类,里面的方法也是抽象的,
那方法体里面怎么会用抽象方法呢?
g.fillArc(xxxxxxxx);

解决方案 »

  1.   

    方法我也查过主要的方法也是抽象的,包括下面用到的方法如我上面写的一个fillArc等,我也没看到实现了Graphics的子类在paint方法中
      

  2.   

    你有没有注意到在这方法中要调用
    super.paintComponent(g);
      

  3.   


    就是这样的!!
    记得以前有人提过这个问题!!】
    就是 
    在Grphics内部!!
    Graphics g=new Graphics()
    类似的语句!!所以返回的是个实例化对象!!当然可以调用方法了
      

  4.   


    正解,一针见血!刚刚又谷歌了一下。大家也可以一起参考。关于Graphics类的一个结论:Graphics类是所有图形上下文(Graphic context)的抽象基类,因此它是不能直接实例化的,那么为了使用Graphics类绘图,就必须创建其非抽象的子类。
    那么我们又如何在这个子类中实现Graphics类(Graphics中定义了很多抽象方法)中的抽象方法呢?
    要用这些方法来实现在特定的组件及设备上绘图,而又不能用Graphics类(因为它无法被实例化),怎么做呢?没有办法。甚至连现有的Graphics类的子类也不会用。但我们知道Applet、Canvas、Frame等很多组件类都继承并重载了repaint()方法,而轻量级的repaint()方法又会调用paint(Graphics g)方法。这样,我们通过继承这些组件类,重写其中的paint方法(因为这个方法提供了Graphics类的子类的实例),在这个方法体中完成我们在对应组件上的绘图意图,然后在外部调用repaint()方法(因为它不需要Graphics参数,我们恰恰也不知道怎么创建一个有用的Graphics类的子类及其实例),就可以实现绘图了。
    概括起来讲就是:找到一个带有(Graphics g)参数的现有方法和一个自动调用该方法而不带有(Graphics g)参数的现有方法,覆盖前一个方法,在外部调用后一个方法,从而实现绘图目的。
    最常见、常用的是paint,paintGraphics和repaint。文章出处:DIY部落(http://www.diybl.com/course/3_program/java/javajs/2007114/83419.html)
      

  5.   


    你写一个出来我看看,new的出来么???
    是这样:
    Graphics g=new Graphics(){...//重写某些方法};
    不止是抽象类,对于接口,同样可以:
    Runnable runnable = new Runnable(){public void run(){}};
    至于楼主说的g.fillArc(xxxxxxxx);
    g代表的是Graphics类的实例。
    既然可以实例化,当然就不是Graphics类了,而是Graphics的非抽象子类。
    这就是上溯造型。