0

抽象スーパークラスに初期フィールド パラメーターのみを定義するコンストラクターがあり、サブクラスの 1 つがその初期化でフィールド パラメーターの 1 つを使用しない場合、未使用のフィールド引数が super() に入る場所に単純に「null」を配置できますか?電話?

これをより明確に説明するために、以下に例を示します。

public abstract class SuperClass {
    protected int xPos;
    protected int yPos;
    protected int zPos; 

    public SuperClass(int xPos, int yPos, int zPos) {
        this.xPos = xPos;
        this.yPos = yPos;
        this.zPos = zPos;
    }
    ... getters & setters, etc.
}

public class SubClass extends SuperClass {
    public SubClass(int xPos, int yPos) {
        super(xPos, yPos, null);
    }
}

これは受け入れられますか?これは良いコーディング方法ですか? それとも、さまざまなタイプの引数を受け入れる複数のコンストラクターを用意する方がよいでしょうか?

4

3 に答える 3

4

nullint 型には代入できません。

複数のコンストラクターを持つことをお勧めします。このようにして、クラス内で「初期化されていない」パラメーターを制御できるため、メンテナンスと読みやすさが簡素化されます

于 2012-09-19T20:34:56.513 に答える
3

これはプリミティブ ( int) であるため、 に設定することはできませんnull

また、このようなことをしなければならないのは、一般的な悪い設計の「臭い」です。サブクラスがスーパークラスの一部の機能を必要としない場合、ここで階層が逆になる可能性が高くなります。サブクラスは、実際にはその親のすべてである必要があります。

少なくともリストした例では、サブクラスは実際にはスーパークラスである必要があり、その逆も同様です。

于 2012-09-19T21:03:56.187 に答える
0

プリミティブ型の場合は に設定しZEROます。に設定することはできませんnull

于 2012-09-19T20:35:08.080 に答える