为什么这行得通? (Java,图形对象)

Why does this work? (Java, Graphics object)

这是我的代码:

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

gg2 都是对同一对象的引用。在 运行 时代,引用的类型并不重要 - 您拥有该对象 运行 一个方法。