2013-02-28 2 views
3

OOP (AS3에서)와 관련하여 Google에 어떻게해야할지 모르겠다는 다소 단순한 이론적 인 질문이 있습니다.AS3에서 메서드를 구현하기 위해 파생 클래스를 적용하는 방법은 무엇입니까?

추상 클래스와 같은 것이 필요합니다.이 클래스는 종속 클래스가 다음과 같이 인터페이스를 구현해야합니다.

Interface ISomething 
{ 
    public function somethingize(otherThing:type):void; 
} 

abstract public class AbstractSomething implements ISomething 
{ 
    public function AbstractSomething() 
    { 
     // ... 
    } 

    public function doSomething():void 
    { 
     //code here 
     // ... 
     this.somethingize(); 
     // ... 
    } 
} 

그런 일을 달성 할 수있는 유일한 방법에 "추상적"키워드를 삭제하고 (에 "구현되지 않은 예외"를 던지기의 구현) SomethingWrapper에 somethingize 이동하는 것입니다, 아니면 더 좋은 방식이있다 그것을 모델로?

+0

이 주제에 대한 제 의견은 "언어가 제공하는 것을 사용하십시오"(인터페이스)에서 벗어나지 않고 자신과 같은 일을하고/또한 아래 답변을 제안했습니다. 솔직하게, 나는 기본적으로 예외를 던지는 메소드를 좋아하지 않는다. 결국 나는 그것이 당신에게 달려 있다고 생각합니다. 나는 인터페이스만으로는 완벽하게 행복해했습니다. 아마도 무지는 정말로 행복합니다. –

+0

또한, 의존성 삽입을 수행하는 MVC 프레임 워크를 사용하면 종속성을 인터페이스로 선언하고이를 구현하는 모든 것을 삽입 할 수 있습니다. 이는 매우 편리합니다. "추상적 인"수업에 대해서도 마찬가지입니까? 이것은 추상적 인 클래스보다 인터페이스를 선호하는 이유 일 수 있습니다. –

답변

3

ActionScript는 추상 클래스를 지원하지 않습니다 (불행히도).

나는 몇 가지 기술이 거기 모방 초록을 시도하고 있다고 생각하지만 내 방식은 예를 들어, 직접 사용도 그냥 그들을 막을 내 추상 클래스의 오류를 던져 :

public class AbstractSomething implements ISomething 
{ 
    public function AbstractSomething() 
    { 
     throw new Error("this is an abstract class. override constructor in subclass"); 
    } 

    public function doSomething():void 
    { 
     throw new Error("this is an abstract class. override doSomething in subclass"); 
    } 
} 
0

자세한 내용은없이 특정 구현에 대해서는 구성보다 상속 이상, 특히 의존성 주입을 선호합니다. SomeWorker의

public interface ISomething { 
    function somethingize(thing:*):void; 
} 

public class SomeWorker { 

    private var _something:ISomething; 

    public function SomeWorker(something:ISomething) { 
     this._something = something; 
    } 

    public function doSomething():void { 

     // work 
     this._something.somethingize(obj); 
     // more work 

    } 
} 

Inherrited 클래스가해야 할 일을 ISomething의 올바른 구현을 주입 할 수도 있고, 그 의존성은 다른 곳에서 해결 될 수있다.

관련 문제