私は抽象クラスと2つのサブクラスを持っています。すべてのクラスに関連する4つの定数があります。私は抽象クラスで決勝戦を行うつもりでしたが、最終的な変数は継承されていないと思いますか? すべてのクラスで定数を定義する必要がありますか(効率的ではないようです)。または、定数をインスタント変数にします(良いアイデアのようには聞こえません)?Java - サブクラスでも使用する必要がある抽象クラスの定数を使用する
どうすればいいですか?
私は抽象クラスと2つのサブクラスを持っています。すべてのクラスに関連する4つの定数があります。私は抽象クラスで決勝戦を行うつもりでしたが、最終的な変数は継承されていないと思いますか? すべてのクラスで定数を定義する必要がありますか(効率的ではないようです)。または、定数をインスタント変数にします(良いアイデアのようには聞こえません)?Java - サブクラスでも使用する必要がある抽象クラスの定数を使用する
どうすればいいですか?
以下は、抽象クラスで定義されている場合、すべてのサブクラスで使用可能です。
public static final Integer MYCONSTANT = 42;
又は
static final Integer MYCONSTANT = 42;
又は
protected static final Integer MYCONSTANT = 42;
第1(パッケージプライベート)は、同じパッケージ内のクラスにのみ利用可能です。 3番目のパッケージ(保護されたパッケージ)は、パッケージに関係なく、すべてのサブクラスで使用できます。
定数は子供によって継承されます。お子様がアクセスできるように、それらをprotected
またはpublic
にしてください。
abstract class A {
protected final static String FOO = "bar";
}
class B extends A {
somemethod() {
System.out.println("foo: " + FOO);
}
}
には、クラスとそのすべての子からアクセスできます。
保護されていると言われてきたことから、「怠惰な」プログラミングが使用されるべきではありません。 – spaz
@spaz:ここでは定数の可視性について説明します - これは本当に継承ではありません。あなたは 'Constants'クラスを作成することもできます。これまで私はすべてのプロジェクトでこれを見てきました。 Btw: '保護された'可視性を '怠け者'と呼ぶのは疑問です...あなたの必要に応じて決まります。 – home
@spazはコンテキストに依存します。それ自身のクラスとその子によってアクセス可能な 'final'変数のためのものです。だから...本当に...とにかく、なぜ「怠惰な」プログラミングになるべきなのだろうか?代わりに何を使うべきですか? –
はいです。しかし、それらが一定であるので、final and static
、static modifier
でなければなりません。コピーが1つしかありません。サブクラスでのみ使用される場合は、protected
を使用するか、他のクラスからでもそれを作る必要があります。public
。
私は試していませんが、子クラスが同じパッケージ内にある場合、2番目のクラスのみが保持されることは確かです。 –
@AngeloNeuschitzerはい正しいです。 – Martin
あなたはそれをこう書いてください、OPは初心者のようで、混乱するかもしれません。 –