根据我的理解,静态成员属于该类,而不属于该类的特定实例。如果所有实例共享具有完全相同值的特定特征,或者如果我根本不想创建该类的任何实例,那么它将非常有用。
所以,如果我有一个班级Car
,并且我的所有汽车总是有4个轮子,我可以将轮子的数量存储为班级Car
的静态成员而不是myCar
类实例的实例变量。
但是为什么在Haxe中不可能从类实例访问静态变量?对我没有任何意义。
class Car
{
public static var noOfWheels:Int = 4;
public static function getNoOfWheels():Int
{
return Car.noOfWheels;
}
}
class Main
{
static function main()
{
myCar = new Car();
trace (myCar.noOfWheels);
trace (myCar.getNoOfWheels());
trace (Type.getClass(myCar).noOfWheels);
}
}
这些痕迹都不会导致预期的结果。第一个和第二个跟踪导致类型错误:
无法从类实例
访问静态字段XY
而第三个导致:
Class< Car>没有字段noOfWheels
编辑以澄清:
我有几个Car
类的子类,继承了它的所有属性。在某些情况下,与类ItalianVan
一样,我再次声明静态变量noOfWheels
,从而使原始Car.noOfWheels
黯然失色。
class ItalianVan extends Car
{
public static var noOfWheels:Int = 3;
}
现在,如果我有一个任意的汽车实例,我想知道它有多少个轮子。如果我访问Car.noOfWheels
,答案将永远是4个轮子,即使那辆特殊的车实际上是一辆三轮意大利面包车。
也许答案是:不要为这样的东西使用静态变量!
但这对我来说并不明显。
如果该类的所有成员具有相同的轮数,则似乎不必使noOfWheels
成为实例变量。
答案 0 :(得分:2)
我从未使用haxe,但我可以看到你正在访问myCar变量。 试试这个:
| Company | Employee | WorkDate | JobNumber |
|---------|----------|------------|-----------|
| ABC | 1234 | 2015-06-11 | 6666 |
如果要访问静态变量,则应使用类名。
要从实例访问静态变量,您可以添加一个非静态方法来返回静态调用的结果。
问候。