2010-11-18 8 views
4

一般的な抽象クラスを持つことはできますか?Animalと言いましょう。すべてのサブクラスで再定義する必要がある定数(または変数ですが、気にしません)を実装しますか?サブクラスがJavaで定数を再定義するようにするにはどうすればよいですか?

例:

abstract class Animal { 
    private static int venerableAge; 
} 

そして、私は異なるサブクラスがお互いの値を読み取りも書き込みのことができるようにしたくない

class Dog extends Animal { 
    private static int venerableAge = 10; 
} 

のようなものを定義する力Dog 。ちょうど彼らの一人。

つまり、各クラスには変数の静的な「インスタンス」が必要です。誰も親にアクセスしません。

これはJavaで可能ですか?

答えて

9

トリックは、フィールドに直接ゲッターメソッドでこれを行うのではなくすることです:

abstract class Animal { 
    abstract int getVenerableAge(); 
} 

class Dog extends Animal { 
    private static int venerableAge = 10; 

    public int getVenerableAge() { 
     return venerableAge; 
    } 
} 

EDIT: コンストラクタをさせるについての結合契約にはどうすればよい:

abstract class Animal { 
    public Animal(int venerableAge){ 
     //carry out sense checks here. i.e.: 
     if (venerableAge < 0) { /* doSomething */ } 
    } 
} 

class Dog extends Animal { 
    private static int venerableAge; 

    public Dog(int age) { 
     super(age) 
     venerableAge = age; 
    } 
} 

今犬や猫を両方とも古来の年齢で作成されることを余儀なくされていますが、(上記のように)互いの価値を見ることはできません。

+0

私は答えが好きですが、このメソッドは現在公開されており、自分のクラス以外の誰かが値を読み取らないようにしたいと考えています。 (しかし私はそれを強制的に設定したい)。私は混乱を避けるために少し質問を編集しました。 – ssice

+0

メソッドをパブリックではなくprotectedにすることができますので、他のクラスはメソッドにアクセスすることができません。 – MBCook

+0

私は、サブクラスも意味しません。 – ssice

関連する問題