あなたのインタフェース契約を知っておく必要があります。 武器の攻撃と再読み込み。
public interface Weapon {
void attack();
void reload(Bullet bullets);
}
武器は再ロード可能な契約に属していないが、それはリロードメソッドを実行するだけでcanditionだ、それはCOMMUNの行動だ、と私たちは共通の話をするとき、我々はAについて話しているかどうかを確認するには母クラス。
このインターフェイスを実装する抽象クラスが必要です。例えば
public abstarct class AbstractWeapon implements Weapon {
public abstract void attack();
public void reload(Bullet bullets){
if (isReloadable())
reloadBullet(bullets);
}
public abstract void reloadBullet(Bullet bullets);
public abstract boolean isReloadable();
}
あなたのクラスの武器(AK12)はAbstractWeaponを継承し、このような三つの方法reloadBullet、攻撃とisReloadable、実装することができるようになります。finnally
public class Ak12 extends AbstractWeapon{
public void attack(){
//TO IMPELEMENT
}
public void reloadBullet(Bullet bullets){
//to implement
}
public abstract boolean isReloadable(){
//To implement
}
}
を、あなたはあなたであなたのAK12を参照することができますインターフェース:
Weapon ak12 =new Ak12();
とあなたのAK12攻撃やリロードし、あなたを尊重が
再ロード可能な状態であります何もしない
public abstract class AbstractWeapon implements Weapon{
private Reload reload = EmptyReload.instance(); //default do nothing
public Reload getReload() {
return reload;
}
public void setReload(Reload reload) {
this.reload = reload;
}
//add reload method
public void reLoad(Bullet bullets){
reload.reload(bullets);
}
}
EmptyReload空のオブジェクトです::
public class EmptyReload implements Reload{
private static EmptyReload emptyReload = new EmptyReload();
private EmptyReload() {
}
public static EmptyReload instance(){
return emptyReload;
}
@Override
public void Reload(Bullet bullets) {
//can not reload,do nothing
}
}
私は別のインタフェースが優れているとして、あなたはセットがダイナミックを実装リロードすることができますリロードを定義が考える10
は、クラス階層を実装することをお勧めします() ')、それぞれの特定の種類の武器のクラスがそれを拡張しなければならないので、クラス' ReloadableWeapon extends Weapons extends Reload'は 'reload()'メソッドを実装します。 – Spock