2014-06-05 96 views
2

我正在学习Haxe,到目前为止,这似乎是一个非常漂亮的语言。但是,我很困惑以下。虽然the documentation没有明确提到什么,以下会导致编译器错误:静态方法不被继承?

class HasMethod { 
    public static function doSomething() { 
     trace("Hello World"); 
    } 
} 

class Extender extends HasMethod {} 

class HelloWorld { 
    public static function main() { 
     HasMethod.doSomething(); 
     Extender.doSomething(); 
    } 
} 

也就是说,抱怨说:

HelloWorld.hx:12: characters 2-22 : Class<Extender> has no field doSomething 

我把它意味着静态方法就是不继承?是否有一个原因?它是底层游戏形式的一个限制吗?

回答

1

这是公平的假设,这是一个设计选择,和明智的。

继承是对象重写某些行为的一种机制。

Animal a = new Dog(); 
Animal b = new Cat(); 
// a and b, although both animals, they will behave differently 

什么是静态继承点?这些功能是静态的,它们直接属于这个类。因此没有实例化,也没有多态性,在这种情况下,“继承”静态函数是没有意义的。

3

声明为静态的方法称为类方法。当您使用继承时,您将创建其类从另一个类派生的对象(这就是为什么您可以使用父类的方法,但未声明为private)。换句话说 - 继承的规则适用于从派生类实例化的对象。

类本身是没有这样一个对象,它解释了为什么你不能叫Extender.doSomething();