this と super

this はそのクラス自身、super は親のクラスを表すキーワードです。


あるクラスを親のクラスとして新しいクラスを設計する方法は、 以前に説明しました。 新しいクラスの中で、親と同じ名前の変数や関数を定義すると、 それは古いものに上書きされます。
では親の関数の機能をそっくり受け継ぎ、さらに機能を追加したい場合は どうすればいいのでしょうか?

そのようなケースのために、Java言語ではキーワード super が用意されて います。 this がそのクラス自身をはっきり指定したい場合に用いられたのと同じです。 super.paint()のようにすれば、 親のクラスの paint()が呼び出すことができます。

この仕組みを利用した例を見てみましょう。 先ほどの SimpleBoard を元にして新しいクラスを作ります。 クラス名は PhotoBoard とします。


import SimpleBoard;
import awt.Graphics;
import awt.Image;

/**
  看板に写真を表示する PhotoBoard クラス
 */
class PhotoBoard extends SimpleBoard {

       public Image photoImage;         // 表示するイメージ
       public Image pinImage;           // ピンのイメージ
       protected int left, top;         // イメージの左端と上端の位置

    /**
     初期設定の関数。アプレットのサイズを設定。
     */
       protected void init() {

             super.init();    // 親のクラスで定義された処理

             String photoName = getAttribute( "photo" );
             if( photoName == null )
                   photoName = "/images/fujiki.gif";

             photoImage = getImage( photoName );
             pinImage = getImage( "/images/redpin.gif" );

             left = 20; top = 20;
       }

    /** 
     アプレットの表示(初期状態)を行う関数。
     */
       public void paint( Graphics g ) {

             super.paint( g );    // 親のクラスで定義された処理

             g.drawImage( photoImage, left, top );
             g.drawImage( pinImage, left+2, top+2 );
             g.drawImage( pinImage, left-20+photoImage.width, top+2 );
             g.paint3DRect( left, top, photoImage.width, photoImage.height,
                            false, true );
       }
}
背景色および背景のタイルイメージを生成し表示する作業は、 super.init(), super.paint()を通じて行われています。