静态方法没有继承?

时间:2014-06-05 04:41:00

标签: inheritance static-methods haxe

我正在学习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

我认为静态方法不是继承的?是否有一个原因?它是(一个)基础游戏形式的限制吗?

2 个答案:

答案 0 :(得分:3)

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

这个类本身并不是一个解释为什么你不能调用Extender.doSomething();

的对象

答案 1 :(得分:1)

公平地认为这是一个设计选择,也是一个明智的选择。

继承是对象覆盖某些行为的机制。

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

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