-1

さて、「拡張」と「実装」の使用について少し混乱しています。シナリオを挙げましょう。単純なタワー ディフェンス ゲームを作っているとしましょう。したがって、クラス(TowerBase.java)を作成した場合、次のような変数とメソッドで埋めることができるというのが私の理解でした。int hp、int damage、int attack(){ ... } など....多くの種類のタワーを作成できると考えました。たとえば、1 つがアーチャー タワーであり、TowerArcher.java 内で TowerBase を設定したいと考えています。タワーの一意の値への変数。私の理解では、TowerBase を拡張すると、TowerBase が現在親であるため、TowerBase のすべての変数とメソッドにアクセスできます。だから私はこれを試しました:

public class TowerBase {
    //Health (Range: 1-100)
    int hp;

    public int attack(int blah){
        //Blah blah how the tower goes about attacking foe
    }

次に、TowerArcher.java で

public class TowerArcher extends TowerBase{
    //Set TowerArcher's unique values
    hp = 10;
}

今、ゲームのどこかで...

TowerArcher archer;
archer.attack(blah);

Eclipse は、TowerArcher.java の "hp = 10;" でこの構文エラーをスローします: VarableDeclaratorId は、このトークンの後に必要です。HPが何かわからないと言っていたと思います。親クラスにあるため、hpが何であるかを知っていると思っていたので、これは私を混乱させます。私は回避策を見つけましたが、それらはそれほど効果的ではないようであり、機能したとしても、拡張と実装が実際に何のためにあるのかについて、まだ混乱しています。基本的に、ここで見つけようとしているのは次のとおりです。
1: extends は何をしますか
2: 私のプログラムで extends を直感的に使うにはどうすれば
よいですか 3:implements は何をしますか
4: 私のプログラムでimplements を直感的に使うにはどうすればよいでしょうか
5: 多くの異なるオブジェクト (タワー) がほぼ同じことをしているこのシナリオで使用すべきもの、おそらく TowerArcher TowerBunker TowerSnipernest TowerBarricade など

。これは他の人にも役立つ可能性があります:)
PS 必要な情報が不足している場合はお知らせください。この時点で私はとても無知です。

4

3 に答える 3

1

extendsあなたの問題は、 と の違いとは何の関係もありませんimplements。継承がどのように機能するかについて十分に理解しているようです。または、少なくともそれについてあなたが言ったことは間違っていません。あなたは構文を台無しにしているだけです。hpコンストラクターで設定する必要があります。

public class TowerArcher extends TowerBase {
    // Can't set hp here; the syntax just doesn't work that way.
    // hp = 10;

    public TowerArcher() {
        // Initialize it here, instead.
        // This runs when you construct a TowerArcher.
        hp = 10;
    }
}
于 2013-07-11T05:03:20.230 に答える