質問

次のセットアップが必要です。

abstract class Parent {
    public static String ACONSTANT; // I'd use abstract here if it was allowed

    // Other stuff follows
}

class Child extends Parent {
    public static String ACONSTANT = "some value";

    // etc
}

これはJavaで可能ですか?どのように?回避できる場合は、インスタンス変数/メソッドを使用したくありません。

ありがとう!

編集:

定数はデータベーステーブルの名前です。各子オブジェクトはミニORMです。

役に立ちましたか?

解決

あなたはあなたが望むように正確にそれをすることはできません。おそらく、受け入れられる妥協は次のとおりです。

abstract class Parent {
    public abstract String getACONSTANT();
}

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}

他のヒント

この場合、あなたが覚えておく必要があるのはJavaでは、静的な方法が過剰にできないことです。何が起こったのかは、ものを隠していることです。

あなたが次のことをした場合にあなたが置いたコードに応じて、答えはnullになります

Parent.ACONSTANT == null ; ==> true

Parent p = new Parent(); p.ACONSTANT == null ; ==> true

Parent c = new Child(); c.ACONSTANT == null ; ==> true

親として親を使用する限り、Aconstantはnullになります。

このようなことをしましょう。

 Child c = new Child();
 c.ACONSTANT = "Hi";
 Parent p = c;
 System.out.println(p.ACONSTANT);

出力はヌルになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top