(1) 抽象类仍可以创建对象,如:
Toolkit tl=getToolkit();//这不是创建对象,这是返回一个对象,创建对象指的是 new (2)同上(3)g已经是一个对象了,它drawImage是它的一个方法,drawImage不是一个类。

解决方案 »

  1.   

    这位师傅,能再问你一个问题吗?
    Grahpics类中有个drawString方法,但这个方法是abstract方法,abstract 方法是不给出方法体的, 但是为什么可以直接调用呢,如:
    Graphics g;
    g.drawString("I admire you",30,80);
    它的方法体是在哪里给出的啊,谢谢了
      

  2.   

    java技术文档里是这样写的
    abstract  void drawString(String str, int x, int y) 
              Draws the text given by the specified string, using this graphics context's current font and color. 
    ----------------------------------------------------------
    drawString
    public abstract void drawString(AttributedCharacterIterator iterator,
                                    int x,
                                    int y)Draws the text given by the specified iterator, using this graphics context's current color. The iterator has to specify a font for each character. The baseline of the leftmost character is at position (x, y) in this graphics context's coordinate system. Parameters:
    iterator - the iterator whose text is to be drawn
    x - the x coordinate.
    y - the y coordinate.
      

  3.   

    很显然Graphics g,这里的g其实是由Graphics的子类创建的,
    也就是说,Graphics的子类实现了Graphics的abstact方法,
    至于具体是哪个子类,我也不是很清楚,
    大概跟踪了一下,好像是SunGraphics2D类来实现的。
      

  4.   

    在下也想问和搂住的第二个问题相同的问题。
    java技术文档没有把这个方法看成抽象方法?还是这个方法通过后台继成?
    希望高手指点。多谢!~
      

  5.   

    flyforlove(为情飞) 说:很显然Graphics g,这里的g其实是由Graphics的子类创建的。
    请问:为什么这么说?
    在下还是不理解。为什么不用Graphics的子类的类名声明,而用Graphics声明?多谢!~
      

  6.   

    Graphics只是一个抽象类,也许它有很多的子类对抽象方法进行实现,如果你用子类声明的话,那么不同的子类,这儿的参数声明就会不同。
       如果用这个抽象类声明的话,不管你传过来的是它哪个子类的对象,都能接受。体现了它的灵活性。
      

  7.   

    楼上说得很对,我具体解释一下,比如有
    抽象类 Human
    class Man extends Human
    我是可以这样声明的 Human m = new Man();
    接口也是同样道理
    楼主所说的情况都是这样,所创建的对象都是抽象类或接口的子类的实例,这样声明的好处楼上的都说了,在实际情况中这样的写法是很常见的,尤其是数据库操作中,那些Statement,ResultSet都是接口,在运行时java回自己辨识型别,也就是所谓的执行期行别辨识