回顾一些与Java和图形相关的教程,并不断看到以下内容:
public void paint (Graphics g)
{
Graphics2D g2;
g2 = (Graphics2D) g;
:
:
}
Graphics和Graphics2D都是抽象类。
另外,Graphics2D是Graphics的一个子类。
因此,从Graphics转换为Graphics2D(g2=(Graphics二维)g;)不应该工作,对吗?
public class Object1 {
int obj1Var1;
public void obj1_Method1()
{
System.out.println("Inside Object1:Method1");
}
}
public class Object2 extends Object1{
int obj2var1;
public void obj2_Method1()
{
System.out.println("Inside Object2:Method1");
}
}
使用上述与Graphics/Graphics2D场景类似的方法,可以看出使用以下方法失败。
Object1 obj = new Object1();
Object2 obj2 = (Object2)obj; <----This fails as expected.
由于从Graphics到Graphics2D的转换有效(特别是因为它们是抽象对象),因此内存中的原始对象必须已经是Graphics二维并定义了抽象方法。那么,传递给paint()调用的Graphics对象引用的内存中的实际底层对象是什么?