2012-05-03 8 views
5

私は抽象クラスと2つのサブクラスを持っています。すべてのクラスに関連する4つの定数があります。私は抽象クラスで決勝戦を行うつもりでしたが、最終的な変数は継承されていないと思いますか? すべてのクラスで定数を定義する必要がありますか(効率的ではないようです)。または、定数をインスタント変数にします(良いアイデアのようには聞こえません)?Java - サブクラスでも使用する必要がある抽象クラスの定数を使用する

どうすればいいですか?

答えて

10

以下は、抽象クラスで定義されている場合、すべてのサブクラスで使用可能です。

public static final Integer MYCONSTANT = 42; 

又は

static final Integer MYCONSTANT = 42; 

又は

protected static final Integer MYCONSTANT = 42; 

第1(パッケージプライベート)は、同じパッケージ内のクラスにのみ利用可能です。 3番目のパッケージ(保護されたパッケージ)は、パッケージに関係なく、すべてのサブクラスで使用できます。

+0

私は試していませんが、子クラスが同じパッケージ内にある場合、2番目のクラスのみが保持されることは確かです。 –

+0

@AngeloNeuschitzerはい正しいです。 – Martin

+1

あなたはそれをこう書いてください、OPは初心者のようで、混乱するかもしれません。 –

2

定数は子供によって継承されます。お子様がアクセスできるように、それらをprotectedまたはpublicにしてください。

abstract class A { 
    protected final static String FOO = "bar"; 
} 
class B extends A { 
    somemethod() { 
     System.out.println("foo: " + FOO); 
    } 
} 

には、クラスとそのすべての子からアクセスできます。

+1

保護されていると言われてきたことから、「怠惰な」プログラミングが使用されるべきではありません。 – spaz

+2

@spaz:ここでは定数の可視性について説明します - これは本当に継承ではありません。あなたは 'Constants'クラスを作成することもできます。これまで私はすべてのプロジェクトでこれを見てきました。 Btw: '保護された'可視性を '怠け者'と呼ぶのは疑問です...あなたの必要に応じて決まります。 – home

+0

@spazはコンテキストに依存します。それ自身のクラスとその子によってアクセス可能な 'final'変数のためのものです。だから...本当に...とにかく、なぜ「怠惰な」プログラミングになるべきなのだろうか?代わりに何を使うべきですか? –

0

はいです。しかし、それらが一定であるので、final and staticstatic modifierでなければなりません。コピーが1つしかありません。サブクラスでのみ使用される場合は、protectedを使用するか、他のクラスからでもそれを作る必要があります。public

関連する問題