public void paint(Graphics g){
      Color c= g.getColor();
      g.setColor(Color.black);
      g.drawOval(200, 200, 50,50);
      g.setColor(c);
      
      
    }
  drawOval()只是Graphics中的抽象方法,也就是说只是声明了一下 而没有方法体,那为什么可以用g. drawOval()能画出一个圆?

解决方案 »

  1.   

    g是new出来 他是Graphics实现类的对象,而该实现类实现了drawOval方法 这就是多态
      

  2.   

    哪里看出g是new出来,他是graphics实现类的对象?
      

  3.   

    我找到的解释,不知道对不对,大家看一下:Graphics 是抽象类,它不是不能用,而是不能直接实例化,因为抽象类中有没有实现的方法。这个类的对象是由java虚拟机实例化,其实它得到的是 Graphics 的一个子类,它实现了 Graphics 类中的抽象方法。
     
    paint(Graphics g) 方法其实传进来的是一个继承了 Grahphics 的子类的实例,这个子类完全实现了 Graphics 的抽象方法。调用者只用关心它的这些画图方法中
      

  4.   

    你在调用这个paint(Graphics g)方法的时候 实际传递进来的必须是Graphics的非抽象子类,也就是有具体实现的类。这样这个代码才成立。
    非抽象子类继承抽象类必须实现它的抽象方法。