在书上看到很多Graphics这个类,可这是个抽象类啊,不是抽象类不能实例化的吗,而且这个类里的很多方法都是抽象方法,怎么可以直接使用呢?不是抽象方法比较OVERRIDE的吗?很不解,请高手帮忙解释一下好不好,十分感谢!public void paint(Graphics g) //?,Graphics是抽象类,怎么可以实例化g?按我的理解应该有个子类 //先继承Graphics,然后再用这个子类实例化对象吧{g.setColor(Color.blue);//?g.drawOval(40, 40, 100, 100);//?g.drawRect(40, 40, 100, 100);//?g.drawString("It is a Oval",60,90);//等等,这些都是抽象方法,为何没有实现就可以调用,或者请 //告诉我这些是在哪个类中被实现的?g.fillOval(180, 40, 100, 80);g.drawRect(180, 40, 100, 80);g.setColor(Color.white);g.drawString("It is a Oval",200,80);}
而且这是面向对象语言中很重要的一种特性,这样做有很大的好处,有点类似与设计模式中的桥接模式,楼主可以好好体会一下OO的精神。
{
Thread clockThread;
public void start()//该方法是Applet的方法,不是线程的方法
{
if(clockThread == null)
{
clockThread = new Thread(this, "Clock");
clockThread.start();
}
}
public void run()
{
while (clockThread != null)
{
repaint();
try
{
clockThread.sleep(1000);
}
catch(InterruptedException e)
{}
}
}
public void paint(Graphics g)
{
Date now = new Date();
g.drawString(now.getHours()+":"+now.getMinutes()+":"+now.getSeconds(),5,10);
}
public void stop()
{
clockThread.stop();
clockThread = null;
}
}
public void paint(java.awt.Graphics g){
super.paint(g);
System.out.println(g.getClass().getName());
System.out.println(g.getClass().getSuperclass().getName());
}//输出
sun.java2d.SunGraphics2D
java.awt.Graphics2D
import java.applet.Applet; //引入Applet类 public class HelloWorld extends Applet {
String hw_text ;
public void init () { //init()方法是Applet首先执行的方法
hw_text = "Hello World";
}
public void paint(Graphics g) {
g.drawString (hw_text , 25, 25) ;
//在坐标为(25,25)的地方显示字符串hw_text
}
}