私は抽象クラスを作成していますが、サブクラスで定義する必要がある変数があります(この場合、スーパークラスで使用されるintです)。私はprotected
変数をデフォルト値で定義するかどうかを決定できず、サブクラスがコンストラクタまたはsetter
メソッドを通じて値を変更させるようにします。または、親クラスに抽象メソッドを定義して、すべてのサブクラスがそれを実装し、使用する値を返すようにする必要があります(抽象メソッドを使用してスーパークラスのメソッドにアクセスします)。一方の方法が他方より優先されるべき大きな理由があるかどうか誰にでも教えてください。サブクラスで指定する必要があるデータに抽象メソッドまたはインスタンス変数を使用する必要がありますか?
抽象メソッド:
public abstract int getValue();
public int getValue() {
return 5;
}
- 長所:
軍サブクラスは、この値を考えると、彼らはそれになりたいものを選択します。
- 短所:
デフォルト値はありませんが、そのサブクラスのほとんどがちょうど同じ値を使用したい場合でも、彼らはまだメソッドを実装する必要があります。
protected int value;
public SubClassImpl() {
value = 5;
}
- 長所::
protected変数(メソッドは、非抽象作られ、デフォルト値を返しますが、その後は値を考えるようにサブクラスを強制する利点を失うことができます)
デフォルト値を定義することができ、サブクラスは気にしない場合でも無視することができます。
- 短所:サブクラスの
著者は、変数の存在を知らされていないので、彼らは、デフォルトの動作に驚かれるかもしれません。
値は不変ですか?そうでない場合、値を変更する責任は誰にありますか? –
値が不変である必要はありませんが、オブジェクトの作成後に値が変更されるとは思われません。 – DaveJohnston
他の視点から見てみるのが良いと思います。それを変更可能にする必要がなければ、それを不変にすることから始めます。要件が表示されたら、変更可能に変更します。 –