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

关于Graphics
下面的测试程序
import   java.awt.*;

public   class   TestGraphics{
public   static   void   main(String   []args){
MyFrame   mf   =   new   MyFrame();
mf.newFrame();
}
}

class   MyFrame   extends   Frame{
public   void   newFrame(){
setBounds(50,50,400,400);
setVisible(true);
}

public   void   paint(Graphics   g){
Color   c   =   g.getColor();//为什么getColor,setColor为抽象的方法没重写却可以调用?
g.setColor(Color.red);
g.fillOval(50,50,40,40);
}
}
?getColor,setColor为抽象方法   没有重写它   怎么这里可以调它了?不是没有实现的方法吗

------解决方案--------------------
Graphics g
——这里的g为Graphics类型的引用,但它所引用的对象当然不可能是Graphics类型的,因为Graphics是个抽象类,不可能被实例化。

但是,难道你忘记了父类型的引用变量可以引用到子类型的对象了么?

这里的g,其实际类型究竟是啥,你基本上不需要知道,你只需要知道它是个Graphics类的子类的对象就可以了。
这也正是多态的好处之一了,如果连这一点都体会不到,那么JAVA语言所支持的继承和多态,还有任何意义可言么?:)
------解决方案--------------------
关注
------解决方案--------------------
不错...
------解决方案--------------------
强制类型转换.
------解决方案--------------------
在我的机器上Graphics g的类型实际上sun.java2d.SunGraphics2D,它是Graphics 的子类(可能不是直接子类,属于子类的子类)