我怎样才能拥有一个通用的抽象类(例如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;
   }
}

现在,“狗”和“猫”都被迫具有很高的年龄,但是(如上所述)却看不到彼此的价值。

10-01 02:12