Graphics インスタンスを Graphics2D インスタンスにダウンキャストできる理由を理解しようとしています。
通常、ターゲットの型を継承していない参照型をダウンキャストすることは規則に反します。
グラフィック指向のクラスでは、階層は次のようになります。
- グラフィックスはスーパークラスです
- Graphics2D は、スーパークラス Graphics のサブクラスです。
Swing で何かを描画するときは、paint() メソッドをオーバーライドします。2D 描画が必要な場合は、自動的に提供される Graphics インスタンスを paint() メソッドから Graphics2D インスタンスにダウンキャストします。
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
}
でもこれは逆?Graphics インスタンスは、graphics2D インスタンスを継承していません-クラス階層を見ると、Graphics インスタンスを継承しているのはGraphics2Dインスタンスです!
なぜこれが許可されているのですか?