抽像方法是不能直接调用的,你这里看到的g,实际是Graphics的一个子类的实例,已经实现了drawLine这个方法,只不过是通过Graphics接口对像做参数传进来的

解决方案 »

  1.   

    抽象方法是不能直接调用的,因为它没有方法体注意多态性,
    public void paint(Graphics g){//參數中直接定義抽象類對象?
       g.drawLine(40,5,30,10);//抽象方法還沒實現?g是Graphics的一个实例,在执行drawLine时是动态绑定到Graphics的某个实例上的方法。
    Graphics有它的具体实现子类。
      

  2.   

    有誰知道drawLine是在哪實現的?
      

  3.   

    就是各个component的Graphics
    Component.getGraphics()
    jdk里可能没有具体的外部实现类,就像迭代接口Iterator和ListIterator
    一样具体实现为某个类的内部类你只要知道Graphics的实例是关联某个component构件而存在的
    getGraphics()只是得到一个拷贝,注意不是引用
    所以画图的基点都是paint(Graphics g)
      

  4.   

    whyxx大蝦好象有些道理﹐但接口的目的是為了實現java里的多重繼承﹐而應當不存在直接定義接口對象(雖然可視接口為一特殊類)﹐就算是定義了接口對象,但接口里照樣都是沒方法體的方法﹐所以drawLine到底是在哪具體實現的﹐我還是沒有搞清楚。
      

  5.   

    对于 public void paint(Graphics g)来说:
    Graphics g确实是类Graphics的一个实例(对象),只不过这个对象是浏览器(继承Graphics后)创建并传递给paint()的,所以这个g运行时已经是一个对象,g.drawLine()也已经有了方法体
      

  6.   

    一再说了,接口不是因为要多继承才出现的,也就是说接口的目的才不是要多继承呢。当然在java里没有多继承的性质,用接口可以间接的实现。但接口和多继承没有关系。