2016-05-10 8 views
2

私はオーバーライドについて質問があります。メソッドをオーバーライドすると、そのメソッドを書き直すと思った。しかし、私が上書きする方法について勉強している間、私は疑問を持っていました。私は次のコードで書かれていると仮定します。paintメソッドのみ(「こんにちは」、25,75)g.drawString含まれる場合メソッドをオーバーライドするときは、メソッド全体をオーバーライドしないでください。私はjava.awt.Container.paintをオーバーライドしようとしました

import java.applet.Applet; 

import java.awt.Graphics; 

public class guitryings_2 extends Applet{ 

    public void paint(Graphics g) 
    { 
     g.drawString("Hi", 25, 75); 
     showStatus("Deneme"); 
    } 

} 

を。 showStatusが存在しない場合は、「Applet Started」というメッセージが表示されます。

オーバーライドとは、メソッド全体を書き直すことを意味し、g.drawStringsのみを書き込まないと、下に表示される文字列は定義されませんでした。だから、「Applet Started」テキストが消えてはいけませんか? AppletContainerに階層までのいずれかのクラスでもないpaint()の独自の実装を提供するので

+0

あなたの上にある '@ Override'アノテーションを追加し、もう一度やり直してください。 – Lefteris008

+2

@ PiXel1225どうすればいいですか?アノテーションは、メソッドが何もオーバーライドしない場合にのみコンパイルエラーを返します。 – Kayaman

+0

@ PiXel1225どこに追加すればよいですか? –

答えて

1

効果的に、あなたはjava.awt.Container.paint(Graphics g)をオーバーライドしています。

これはオーバーライドするメソッドです(メソッドが常にオーバーライドされるため、メソッドの一部だけをオーバーライドできません)オーバーライドされたメソッドを呼び出すことができます(super.paint(g)など) 。

しかし、java.awt.Container.paint()は ので、あなたが見るメッセージ(Applet started)が明らかにアプレットコンテナによって印刷され、任意のアプレット固有のコードが含まれていません - (まだそのステータスバーの主制御を持っている)ブラウザのように、またはアプレットビューア

アプレットが廃止され、一部のブラウザではアプレットをサポートするために必要なネイティブAPIを廃止していることに注意してください。

+0

だから、それは食っていますか?私はshowStatusメッセージを定義しないと、それは私のためのデフォルトのメッセージを定義していますよね? @Andreas Fester –

+1

'java.awt.Container.paint(Graphics g)'(実際には実装を提供する)ですが、そうです。 – Kayaman

+0

だから、それも上書きについてではありませんか? –

関連する問題