Inheritance 静态方法没有被继承?

Inheritance 静态方法没有被继承?,inheritance,static-methods,haxe,Inheritance,Static Methods,Haxe,我正在学习Haxe,到目前为止,它似乎是一种非常漂亮的语言。然而,我对以下几点感到困惑。虽然没有明确提及任何内容,但以下内容会导致编译器错误: class HasMethod { public static function doSomething() { trace("Hello World"); } } class Extender extends HasMethod {} class HelloWorld { public static func

我正在学习Haxe,到目前为止,它似乎是一种非常漂亮的语言。然而,我对以下几点感到困惑。虽然没有明确提及任何内容,但以下内容会导致编译器错误:

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
HelloWorld.hx:12:字符2-22:类没有字段doSomething

我认为这意味着静态方法不能被继承?这有什么原因吗?这是基础playforms(其中一种)的限制吗?

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


类本身不是这样一个对象,这解释了为什么不能调用
Extender.doSomething()

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


类本身不是这样一个对象,这解释了为什么不能调用
Extender.doSomething()

可以公平地假设这是一个设计选择,也是一个明智的选择

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

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

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

可以公平地假设这是一种设计选择,也是明智的选择

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

Animal a = new Dog();
Animal b = new Cat();
// a and b, although both animals, they will behave differently
静态继承有什么意义?函数是静态的,它们直接属于类。因此,没有实例化,没有多态性,在这种情况下,“继承”静态函数没有什么意义