2010-11-18 15 views
4

Wie kann ich eine generische abstrakte Klasse haben, sagen wir Animal, und sie eine Konstante implementieren lassen (oder eine Variable; es macht nichts), die von allen Unterklassen neu definiert werden muss?Wie kann ich Unterklassen zwingen, eine Konstante in Java neu zu definieren?

Beispiel:

abstract class Animal { 
    private static int venerableAge; 
} 

Und Kraft Dog um so etwas wie

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

definiert werden Ich möchte nicht verschiedene Unterklassen der Lage sein, lesen noch schreiben jeweils anderen Wert . Nur der eine von ihnen.

Das heißt, jede Klasse muss ihre eigene statische "Instanz" der Variablen haben. Und niemand wird auf die Eltern zugreifen.

Ist das in Java möglich?

Antwort

9

Der Trick ist, diese mit Getter-Methoden zu tun, anstatt direkt mit den Feldern:

abstract class Animal { 
    abstract int getVenerableAge(); 
} 

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

    public int getVenerableAge() { 
     return venerableAge; 
    } 
} 

EDIT: Wie über den Konstruktor lassen Sie den Vertrag verbindlich:

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; 
    } 
} 

Jetzt Hund und Katze Beide sind gezwungen, mit ehrwürdigen Zeiten erschaffen zu werden, aber (wie oben ausgeführt) können sich nicht gegenseitig sehen.

+0

Ich mag die Antwort, aber die Methode ist jetzt öffentlich, und ich möchte den Wert von niemandem außer der eigenen Klasse gelesen werden. (Trotzdem möchte ich es zwingen). Ich habe meine Frage etwas bearbeitet, um Verwirrung zu vermeiden. – ssice

+0

Sie können die Methode anstelle von public schützen, sodass andere Klassen nicht darauf zugreifen können. – MBCook

+0

Ich meine, Unterklassen weder. – ssice

Verwandte Themen