Graphics2DをGraphicsにダウンキャストできる理由

Swingのコンポーネントへ描画関連の処理を加える場合、paintComponent(Graphics g)をオーバーライドして使います。
ここでの常套手段として、以下のようなサンプルコードをいたるところで見ることができます。

@Override
public void paintComponent(Graphics g) {
	Graphics2D g2D = (Graphics2D)g;
	g2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
}

ここではたまたまアンチエイリアスをONにしていますが、問題はキャスト部分です。
Graphics2DクラスはGrahhicsクラスのサブクラスなので、ダウンキャストとなるんだけど、なんでこの処理がコンパイルエラーにならないのか!
ググってみたら偉大なる先人様がいました。

ダウンキャスト#2(Graphics→Graphics2Dのキャスト)
http://hightide.blog2.fc2.com/blog-entry-261.html

要するに、paintComponent(Graphics g)の引数の正体はGraphics2D。
gの実態がGraphics2Dということみたい。
このメソッドの前の段階で実は、Graphics g = new Graphics2D() って感じでアップキャストされてるからだいじょうぶって寸法。


ということで確証を得ようと思い、Javaソースコードを探索してきた。
Graphics、JComponent、Imageといろいろ見て回ったけど、見つかりません!!
放置で。