日期:2014-05-20  浏览次数:20955 次

为什么抽象方法没有实现, 为什么可以调用的,而且能够实现其应有的功能?
看了这段代码后,我有个地方不明白,
import   java.awt.*;
import   java.awt.event.*;
import   javax.swing.*;

class   DrawImage   extends   JFrame   {
    Image   img=getToolkit().getImage( "background.gif ");
    private   static   JPanel   p1   =   new     JPanel();
    private   static   JButton   b2   =   new   JButton( "fff ");
    public   void   paint(Graphics   g)
    {
    g.drawImage(img,0,0,400,400,this);
    }
   
//   public   void   paintComponents(Graphics   g)
// {
// //super.paintComponents(g);
// g.drawImage(img,0,0,this);
// }

    public   static   void   main(String   args[])   {
        System.out.println( "Starting   DrawImage... ");
        DrawImage   mainFrame   =   new   DrawImage();
        //mainFrame.paintComponents
        mainFrame.getContentPane().add(p1);
       
        mainFrame.setSize(400,   400);
        p1.add(b2);
        mainFrame.setTitle( "DrawImage ");
        //mainFrame.pack();
        mainFrame.setVisible(true);
    }
}


这个方法中的g.drawImage(img,0,0,400,400,this);调用的是Graphics中的抽象方法,
请问抽象方法没有实现,为什么可以调用的,而且能够实现drawImage方法应有的功能?

------解决方案--------------------
Graphics 类是所有图形上下文的抽象基类,允许应用程序可以在组件(已经在各种设备上实现),以及闭屏图像上,进行绘制。
------解决方案--------------------
没有实现当然不能调用了。他调用的其实是子类的实现。
------解决方案--------------------
用 System.out.println(g.getClass().getName()) 就知道这个 Graphics 对象的实际名称了。
------解决方案--------------------
他根据系统相关性实现了,在运行库中