2014-06-05 3 views
2

나는 지금까지 꽤 멋진 언어 인 Haxe를 배우는 중입니다. 그러나, 나는 다음과 같이 혼란스러워한다. the documentation 명시 적으로 아무것도 언급하지 않지만, 다음은 컴파일러 오류가 발생합니다 : 나는 그것을 받아정적 메서드가 상속되지 않습니까?

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

정적 방법은 단지 상속되지 않는다는 의미 : 즉

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

class Extender extends HasMethod {} 

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

를, 그 불평? 이것에 대한 이유가 있습니까? 근원적 ​​인 플레이 폼의 한계가 있습니까?

답변

1

그것은이 디자인의 선택을 가정하는 공정, 그리고 현명한 하나를 호출 할 수없는 이유를 설명 이러한 개체가 아닙니다.

상속은 개체가 특정 동작을 재정의하는 메커니즘입니다.

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

정적 상속의 요지는 무엇입니까? 함수는 정적이며 클래스에 직접 속합니다. 따라서 인스턴스화가없고, 다형성도없고, "상속 된"정적 함수는 그 맥락에서 거의 의미가 없습니다.

3

정적으로 선언 된 메서드를 클래스 메서드라고합니다. 상속을 사용하면 클래스가 다른 클래스에서 파생 된 객체를 만듭니다 (따라서 private으로 선언되지 않은 부모의 메서드를 사용할 수 있습니다). 즉, 상속 규칙은 파생 클래스에서 인스턴스화 된 객체에 적용됩니다.

클래스 자체는 Extender.doSomething();

관련 문제