2010-11-18 70 views
4

我怎麼能有一個通用的抽象類,讓我們說動物,並讓它實現一個常量(或變量,它不介意),必須由所有子類重新定義?如何強制子類在Java中重新定義常量?

例子:

abstract class Animal { 
    private static int venerableAge; 
} 

,並迫使Dog來定義類似

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

我不想不同的子類,以便能夠讀也不會寫對方的價值。只是他們自己的一個。

即,每個類必須有自己的變量的靜態「實例」。沒有人會訪問父母的。

在Java中可能嗎?

回答

9

訣竅是用領域具有getter方法來做到這一點,而不是直接:

abstract class Animal { 
    abstract int getVenerableAge(); 
} 

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

    public int getVenerableAge() { 
     return venerableAge; 
    } 
} 

編輯: 如何讓構造做合同約束:

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 2010-11-18 21:53:29

+0

您可以使方法受到保護而不是公開,所以其他類將無法訪問它。 – MBCook 2010-11-18 21:55:06

+0

我的意思是,子類都沒有。 – ssice 2010-11-18 21:56:38