4

次の設定が必要です。

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です。

4

2 に答える 2

18

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

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

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}
于 2010-10-12T02:36:26.610 に答える
2

この場合、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);

出力はnullになります。

于 2010-10-12T03:57:37.187 に答える