类实例化实例,静态是特定于类的,那么为什么实例不共享静态属性?

时间:2016-06-15 05:19:51

标签: java oop static

static属性是特定于类的,对我而言,这意味着它只是该类的一个属性。我知道实例使用实例变量。我的问题是,如果我创建一个名为Animal的类并创建一个名为live的静态属性(这是有意义的,因为实时是Animal的静态属性),那么为什么它不会适用于doghuman等实例,但仅限于Animal类?它们都是活的,在这里我可以看到实例真正共享这个静态属性live

请不要给我Java定义或Oracle文档定义;我知道这一切。作为初学者,我想知道为什么它在字面意义上没有意义。

1 个答案:

答案 0 :(得分:4)

class Animal {
  int age;
}

以上表明动物的每个实例包括动物的子类的实例都有一个age,每一个都是独立的:动物可以& #39;看到或影响彼此的年龄。在内部,当您致电new Animal()new Dog()时,Java会在该实例中为age留出空间。

class Animal {
  static String kingdom = "Animalia";
}

然而,这一个表明名为Animal有一个属性,只有一个,它被称为Animal.kingdom kingdom属性在没有Animal实例的情况下可用,并且(在Dog扩展Animal的层次结构中)出现Animal.kingdomDog.kingdom,{ {1}}和someAnimalInstance.kingdom。但是,所有这些都是作为礼貌提供的:官方访问者是someDogInstance.kingdom,并且只有一个,无论你有多少实例(包括零)你拥有Animal或其子类。

相关: Why should the static field be accessed in a static way?