Inheritance 静态方法没有被继承?
我正在学习Haxe,到目前为止,它似乎是一种非常漂亮的语言。然而,我对以下几点感到困惑。虽然没有明确提及任何内容,但以下内容会导致编译器错误: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
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
静态继承有什么意义?函数是静态的,它们直接属于类。因此,没有实例化,没有多态性,在这种情况下,“继承”静态函数没有什么意义