一人称シューティング ゲームを作成しているとします。プレイヤーは複数の銃から選択できます。
Gun
関数を定義するインターフェースを持つことができますshoot()
。
クラスのさまざまなサブクラス、Gun
つまりShotGun
Sniper
などが必要です。
ShotGun implements Gun{
public void shoot(){
\\shotgun implementation of shoot.
}
}
Sniper implements Gun{
public void shoot(){
\\sniper implementation of shoot.
}
}
シュータークラス
射手はアーマーにすべての銃を持っています。それを表すを作成しましょうList
。
List<Gun> listOfGuns = new ArrayList<Gun>();
射手は、関数を使用して、必要に応じて銃を循環させます。switchGun()
public void switchGun(){
//code to cycle through the guns from the list of guns.
currentGun = //the next gun in the list.
}
上記の関数を使用して現在の Gun を設定し、 が呼び出されたshoot()
ときに関数を呼び出すだけfire()
です。
public void fire(){
currentGun.shoot();
}
シュート機能の動作は、インターフェイスの実装によって異なりGun
ます。
結論
クラス関数が、実装されたクラスのインスタンス(オブジェクト)に基づいて、その動作を変更する対象となる別のクラスの関数に依存している場合、インターフェイスを作成します。
たとえばfire()
、クラスの関数は、 Shooter
guns( Sniper
、ShotGun
) が関数を実装することを期待していshoot()
ます。ですから、銃を切り替えて発砲します。
shooter.switchGun();
shooter.fire();
fire()
関数の動作を変更しました。