トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

オブジェクト指向プログラミング(H16)2004/11/25

クラスの定義

Robocodeで作成するロボットはRobotクラス継承したもの。継承するときはextendsを使う。

public class Dummy01 extends Robot {
  ....
}
  • ロボコードのロボット名は実際にはクラス
  • Javaのソースファイルの名前はクラス名を使い、拡張子には.javaをつける。
  • extendsに続くRobotが継承元のクラス(親クラス、スーパークラス)である。
  • 一つのファイルに一つのクラスを定義する。
  • publicはクラスに対するアクセスを制御するキーワードでRobocodeでこのpublicを省略するとコンパイルは出来るがバトルは出来なくなる

継承を利用しないときはextends以降は不要。ただし、ロボットのクラスではエラーになる。

public class Dummy01 {
  ...
}

package

パッケージクラスを機能などで分類したもの。実際にはフォルダを使って分類している。これにより同じ名前のクラスパッケージごとに作れる。

Robocodeでは最初にロボットを作る際に入力した名前のフォルダがC:\robocode\robotsの中に作られる。

ネットワークからダウンロードしたロボットのファイルは一つのファイルにまとめられている。このファイルの拡張子は.jarでC:\robocode\robotsに置かれる。

RobotクラスなどもjarファイルにまとめられていてC:\robocodeにrobocode.jarという名前で置かれている。

jarファイルの内容を確認するにはコマンドプロンプトで

jar -fvt xxxx.jar

と入力すればよい。

import

他のパッケージで利用したいクラスがあるとき、そのパッケージを指定する文。

import パッケージ名.クラス名;

RobocodeではRobotクラスなどを使うため、次のようにrobocodeパッケージを指定する。

import robocode.*;

この文を使わないとクラスを参照できないためコンパイルが失敗する。

オーバーライド override

クラス(スーパークラス)で定義されているメソッドを再定義すること。ただし、戻り値引数が元のメソッドと同じでなければならない。

たとえば、Robotクラスには砲弾を発射するメソッドfire()がある。継承したクラスで次のように定義すると何もしなくなる。

public void fire(double p){
}

メソッドを再定義してもスーパークラスのメソッドが上書きされるのではなくメソッドの参照先が変わるだけである。もし、スーパークラスのメソッドを利用するのであれば次のように記述すればよい。

supser.fire(1);

superがスーパークラスのという意味になる。このsuperに対する文がthisである。通常fire()という表記は

this.fire(1);

と同じである。