【发布时间】:2017-03-22 13:25:37
【问题描述】:
假设我有一堂课:
public abstract class Foo{
public static int i = 0;
}
我想这样当我有 2 个额外的类时:
public class Bar extends Foo{
public Bar(){ i=1; }
}
和
public class t extends Foo{
public t(){ i=-1;}
}
那 Bar.i 和 t.i 不是同一个值,而是它们各自的子类的静态值。
这是如何正确完成的?
这是一个更好的例子:
说我有课:
public abstract class vehicle{
public static int tires;
}
我有两个子类:
public class car extends vehicle{
public car(){
//ALL cars have 4 tires. this is static to cars.
tires = 4;
}
}
和
public class motorcycle extends vehicle{
public motorcycle(){
//All motorcycles have 2 tires. this is static to motorcycles.
tires = 2;
}
}
很明显,汽车和摩托车确实不有相同数量的轮胎,但我仍然希望能够同时访问 car.tires 和 motor.tires,分别返回 4 和 2。鉴于变量是车辆,我还希望能够调用 {variableName}.tires。我还希望以后能够添加更多这样的变量,例如另一个 int numberOfLights。
【问题讨论】:
-
所以,当你初始化一个
Bar实例时,你将所有i变量设置为1? -
但是
Bar.i是未定义的。他们都是Foo.i -
如果您不希望子类共享,则必须在每个子类中定义一个
static变量。 -
如果您需要 instance 变量,请删除
static。 -
“那么我如何让子类继承它自己唯一的静态变量?”——你不知道。这是一个很好的例子,说明继承和静态不能很好地混合。
标签: java static virtual abstract