2012-03-24 5 views
0

두 클래스가 있습니다.반환 형식을 바꾸기 위해 플렉스 오버라이드

class A{ 
    protected var _value:A; 

    public function get value():A{ 
     return _value; 
    } 
} 

class B extends A{ 

    override public function get value():B{ 
     return super.value as B; 
    } 
} 

내 재정의 오류가있어서 해결 방법을 모릅니다. 메서드를 재정의하고 반환 값을 변경하려고합니다.

+0

이것은 불가능합니다. 왜 그렇게하고 싶은지 설명해 주시겠습니까? 더 나은 접근 방법이있을 수 있습니다. – sch

답변

3

찾고있는 기능은 covariant return type이지만 AS3은 사용할 수 없습니다.

+0

영어로 설명하는 것이 조금 복잡하지만 시도는 복잡합니다. 나는 인프라 구조와 게임을 가지고있다. 나는 싱글 톤을 가지고 있는데, 인프라와 게임에서 모두 사용하고있다. (당신이 묻는다면 내가 어떻게 설명 할까?) 그리고 나는 나의 싱글 톤 클래스의 멤버들이다. 단일 톤). 따라서 API 클래스는 인프라 단일 톤에서 초과해야하며 게임 단일 톤에서 오버라이드되고 초과되어야하며 게임에서 액세스 할 때마다 캐스팅하지 않으려 고합니다. 이제는 as3에 대한 해결책이 없습니다. –

1

메서드를 재정의 할 때 메서드 서명을 변경할 수 없습니다. 두 가지 방법 모두에 대해 반환 형식을 덜 구체적인 형식 (예 : Object)으로 만들도록 선택할 수 있지만 일부 형식 검사는 필요하지 않습니다.

1

재정의의 반환 유형이나 인수를 변경할 수 없습니다. 서명은 항상 일치해야합니다.

그러나 현재의 상속 모델은 당신이하는 A에 대한 B를 반환 할 수있는 것 :

class B extends A { 

    override public function get value():A{ 
     return new B(); 
    } 
} 

하고 발신자 방법에서 B로 반환 값을 캐스팅 할 수있다.

이렇게하는 또 다른 방법은 반환 형식을 *로 설정하는 것이지만 직접 입력 형식을 확인해야합니다.

관련 문제