为什么无法从类实例访问静态字段?

时间:2015-07-30 12:44:23

标签: static-members haxe

根据我的理解,静态成员属于该类,而不属于该类的特定实例。如果所有实例共享具有完全相同值的特定特征,或者如果我根本不想创建该类的任何实例,那么它将非常有用。

所以,如果我有一个班级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成为实例变量。

1 个答案:

答案 0 :(得分:2)

我从未使用haxe,但我可以看到你正在访问myCar变量。 试试这个:

| Company | Employee |   WorkDate | JobNumber |
|---------|----------|------------|-----------|
|     ABC |     1234 | 2015-06-11 |      6666 |

如果要访问静态变量,则应使用类名。

要从实例访问静态变量,您可以添加一个非静态方法来返回静态调用的结果。

问候。