关于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 的子类(可能不是直接子类,属于子类的子类)