看了这段代码后,我有个地方不明白,
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 对象的实际名称了。
------解决方案--------------------
他根据系统相关性实现了,在运行库中