为什么这样做有效?(Java,图形对象)

为什么这样做有效?(Java,图形对象),java,text,graphics,instance,antialiasing,Java,Text,Graphics,Instance,Antialiasing,这是我的密码: public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); g.drawString("This is my string", 200, 200); } 这是正确的;文本显示为抗锯齿。然而

这是我的密码:

public void paint(Graphics g) {

    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

    g.drawString("This is my string", 200, 200);
}
这是正确的;文本显示为抗锯齿。然而,为什么它会起作用?文本是由g对象绘制的,但就我所见,g2对象的抗锯齿已打开。g对象是如何得到它的

Graphics2D g2 = (Graphics2D) g;

gg2都是对同一对象(g)的引用。g将对象称为Graphics2D,而g2将对象称为Graphics2D

g
g2
都是对同一对象的引用。在运行时,引用的类型实际上并不重要——您可以让该对象运行一个方法

因为您将
g2
作为对
g
对象的引用。
g
g2
是同一个对象,所以您刚刚将其铸造。谢谢。所以,当你将一个对象投射到另一个对象时,你没有创建任何新对象?你实际上只是在“投射”对对象的引用?这是正确的。这里的对象(g)既是图形又是图形2d。根据具体情况,您可能需要将其用作图形或图形2D。