プロが教える店舗&オフィスのセキュリティ対策術

継承とsuperの意味が理解できません。

今日は、JAVA初心者です、宜しくお願いします。
1番目のアプレットで「Applet」を継承させると、正常にWINDOWが表示されます。
しかし、2番目のアプリケ-ションを動かすと、「JFrame」を継承して、「PAINT」
を上書きしているのに、WINDOWは表示されますが、
透明になって、下側の画面が映り、Todayという文字は正常に表示されません。
paintメソッド内に、「super.paint(g);」を書いてやると、正常に動作します。
(3番目のプログラム)

テキスト通に、「JFrame」を継承して、「PAINT」を上書きしているのに、「PAINT」
メソッド内で、更に「super.paint(g);」を呼び出す必要性、理由がわかりません。
継承の意味が無いと思うのですが、他に原因があるのでしょうか。
継承している子クラスは、無条件で親クラスのメソッドを上書き出来ると思うのですが、
一体どのような時にSUPERが必要になるのでしょうか。
宜しくお願いします。

1番目のプログラムをと2番目のプログラムはアプレット、アプリケーションとの違い
はあるとしても、 基本的な考え方は違わないと考えてるのですが。

======================================================
public class Sample1 extends Applet
{
public void paint(Graphics g)
{
g.drawString("java",10,10);
}
}
======================================================
public class JFrameTest extends JFrame
{
JFrameTest()
{
setSize(400,300);
setTitle("JFrameTest");
}

public void paint(Graphics g)
{
g.drawString("Today",100,100);
}

public static void main(String[] args)
{
JFrame jf = new JFrameTest();
jf.show();
}
}
======================================================
public class JFrameTest extends JFrame
{
JFrameTest()
{
setSize(400,300);
setTitle("JFrameTest");
}

public void paint(Graphics g)
{
super.paint(g);
g.drawString("Today",100,100);
}

public static void main(String[] args)
{
JFrame jf = new JFrameTest();
jf.show();
}
}
======================================================

A 回答 (1件)

私は .NET 使いなので Java は疎いのですが、


メソッドをオーバーロードして望み通りの結果が得られないという事は、親クラスの paint メソッド内で何か必要な処理をしているという事です。それを上書きしてしまうとその処理が呼び出されなくなる為動かなくなっているのでしょう。

JFrame の paint は下記にあるように
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
java.awt.Container 由来のようなので、そちらを見てみると、super.paint(g) を呼べ、と書いてありますね。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/ja …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!