• ベストアンサー

Appletのpublic void paint(Graphics g)

は抽象クラスのGraphicsのオブジェクトを引数に持ちますが抽象クラスはオブジェクトを発生できないのに何故オブジェクトを渡せるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • UKY
  • ベストアンサー率50% (604/1207)
回答No.1

実際にパラメータとして渡されるのは、Graphicsのサブクラスのインスタンスだからです。 Graphics クラスは抽象クラスですが、そのサブクラスは抽象クラスとは限りません。

keyguy
質問者

お礼

ありがとうございます。 Appletの場合そのクラスは具体的に例えばどのようなクラスでしょうか?

その他の回答 (1)

  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.2

実際に渡されるのは、 GraphicsのサブクラスであるGraphics2Dの、 さらにサブクラスの、 各ウィンドウシステムごとに特化したクラスのオブジェクトです。 それは、たとえばWindowsなら Windowsの画面描画APIとJavaのグラフィック処理をとりもつクラスであり、 Linux等なら、X Window Systemの描画とJavaをとりもつクラスです。 こういうふうに、抽象化したクラスのインスタンスを 渡せるというのが、 とりもなおさずオブジェクト指向です。 たとえで話しますが… 寄せ鍋のレシピで「野菜と、肉と、白身の魚を入れる」とあったとします。 魚屋に行って 「白身の魚をください」 「鱈でいいですか?」 「いえ、鱈ではありません。 純粋に白身の魚そのものが欲しいのです!」 と言っても売ってくれません。 「白身の魚」と言えば鱈やアンコウのことであり、 そのうちのどれでもかまわないという意味です。 Javaの場合、環境間での互換性を重要視するので、 環境によって違うグラフィック処理はプログラマに見せたくありません。 そのためここは抽象クラスを使っています。 また、この機能(抽象化およびポリモーフィズム)により、 オブジェクト指向プログラムが他の手法より柔軟な構造になるのです。

keyguy
質問者

お礼

ありがとうございます。

関連するQ&A