クラスの定義
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);
と同じである。