如何在Java中强制子类重新定义常量?

如何在Java中强制子类重新定义常量?,java,oop,Java,Oop,我如何拥有一个泛型抽象类,比如说Animal,并让它实现一个必须由所有子类重新定义的常量(或变量;它不介意) 例如: abstract class Animal { private static int venerableAge; } 并强制Dog定义如下 class Dog extends Animal { private static int venerableAge = 10; } 我不希望不同的子类能够读取或写入彼此的值。只有他们自己 也就是说,每个类都必须有自己的变

我如何拥有一个泛型抽象类,比如说Animal,并让它实现一个必须由所有子类重新定义的常量(或变量;它不介意)

例如:

abstract class Animal {
    private static int venerableAge;
}
并强制
Dog
定义如下

class Dog extends Animal {
    private static int venerableAge = 10;
}
我不希望不同的子类能够读取或写入彼此的值。只有他们自己

也就是说,每个类都必须有自己的变量静态“实例”。没有人会访问家长的


这在Java中可能吗?

诀窍是使用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){/*doSomething*/}
}
}
狗类动物{
私人养老;
公犬(国际年龄){
超级(年龄)
高龄=年龄;
}
}

现在,狗和猫都被强制创建为具有古老的年龄,但(如上所述)看不到彼此的价值。

我喜欢答案,但该方法现在是公开的,我希望除了自己的类之外,任何人都不能读取该价值。(但我想强制设置它)。为了避免混淆,我对我的问题进行了一些编辑。您可以将该方法设置为受保护的而不是公共的,这样其他类就无法访问它。@ssice您能否提供有关为什么要这样做的详细信息?我不确定你想做什么有意义。我也不知道。这是一个理论问题。强迫一个子类重新定义内在的东西。狗的性情由狗知道,猫的性情由猫知道,但这些物种不知道彼此的性情,也不能向对方索取。