【发布时间】:2015-07-30 12:44:23
【问题描述】:
在我的理解中,静态成员属于类而不是该类的特定实例。如果所有实例都以完全相同的值共享此特定特征,或者我根本不想创建该类的任何实例,这将很有用。
所以,如果我有一个类 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
而第三个导致:
类
没有字段 noOfWheels
编辑澄清:
我有几个Car 类的子类,继承了它的所有属性。在某些情况下,比如ItalianVan 类,我再次声明了静态变量noOfWheels,从而使原来的Car.noOfWheels 黯然失色。
class ItalianVan extends Car
{
public static var noOfWheels:Int = 3;
}
现在,如果我有一个任意汽车实例,我想知道它有多少个轮子。如果我访问Car.noOfWheels,答案总是四轮,即使那辆特殊的汽车实际上是一辆三轮意大利面包车。
也许答案是:不要对这样的东西使用静态变量!
但我不清楚为什么。
如果该类的所有成员具有相同数量的轮子,则似乎没有必要将 noOfWheels 设为实例变量。
【问题讨论】:
标签: static-members haxe