複数のクラスからなるアプレット

アプレットのソースが複雑化してくると、 その内部で新しいクラスを使用する必要が出てきます。


アプレットがある程度複雑になってくると、 ソース・プログラム自身も長くなり、全体が見えにくくなります。 1つの解決方法は前に述べたようにクラスの継承を利用して、 少しずつ機能を追加するやり方です。
その他の方法もあります。 複雑な構造を持つアプレットでは、 アプレットを構成する複数の種類の部品が存在するでしょう。 そうした部品自体を別のクラスとしてあらかじめ用意するやり方です。

たとえば、表計算を行うアプレットとか、 ボード・ゲームのようなアプレットを思い浮かべてください。 そうしたアプレットは、もっと小さな「升目」を単位として構成されているでしょう。 そして、それらの「升目」は特定の処理(計算とかゲームのキャラクターの表示) を機能として持つようにすれば、プログラムを設計するのが楽になるでしょう。
このようなアプレットでは、部品にあたるデータも新しいクラスとして 定義することが可能です。


部品となるクラスは、Applet クラスの拡張ではありません。 全く新しくデータの集まりとして定義されます。 また、それらの内部データを初期化するために、「コンストラクタ」と 呼ばれる特殊な関数が用意されるのが普通です。


/**
  塗りつぶす領域を表す BoardCell クラス
*/
class BoardCell {
 
       public SimpleBoard parent;    // 親のオブジェクト
       public int i,j;               // セルのインデックス
       public int width, height;     // セルのサイズ
       public Color color;           // セルの色
       public boolean isPainted;     // 塗りつぶされているか
       public boolean toBePainted;   // 塗り直すべきか
 
/**
  コンストラクタ(クラスの新しいデータの生成を行う)
*/
       BoardCell( SimpleBoard parent, int i, int j,
                            int width, int height ) {
 
              this.parent=parent;
              this.i=i;   this.j=j;
              this.width=width;  this.height=height;
              this.color=parent.bgColor;
              this.isPainted=false;
              this.toBePainted=false;
       }
                        :
                        :


複数のクラスを用いる場合、それらを1つのソースファイルにまとめても、 別々のファイルに分けて保存してもどちらでもかまいません。
単独のファイルにした場合でも、その中にクラスの定義が複数あるわけで、 コンパイルすると複数の .class ファイルが生成されます。