【问题标题】:Static methods not inherited?静态方法不继承?
【发布时间】:2014-06-05 04:41:00
【问题描述】:

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

我的意思是静态方法不被继承?是否有一个原因?它是(其中一种)基础游戏形式的限制吗?

【问题讨论】:

    标签: inheritance static-methods haxe


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-07
        • 2012-06-21
        • 2015-03-20
        • 2011-06-26
        • 1970-01-01
        • 2017-09-11
        • 2016-10-06
        • 2014-07-15
        • 2015-05-16
        相关资源
        最近更新 更多