Допустим тебе надо чтобы некий класс рассылал события "от своего имени", но при этом ты не можешь наследовать его от EventDispatcher (т.к. наследуешь от другого). Однако обеспечить функционал ты можешь агрегированием (композицией), заведя в этом классе встроенный объект EventDispatcher. Загвоздка только в том, что если рассылать события через него, то target у события будет ссылкой на этот объект EventDispatcher, а не на агрегат. Поскольку речь идет не столько о дисплейных объектах, то получить ссылку на сам агрегат будет затруднительно и потребует новых геттеров или особого класса события - target.parent тут не поможет. Вот для этого target и переобъявляется (хехе ну и слово). Однако нам ведь нужна уверенность, что этот новый таргет сможет полноценно прикинуться EventDispatcher - на него ведь будут вешать листенеры и т.п. Значит он обязан имплементить интерфейс IEventDispatcher.
Пример:

Код AS3:
package
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class IEDClass implements IEventDispatcher
{
private var _dispatcher:EventDispatcher;
private var _timer:Timer = new Timer(500);
public function IEDClass()
{
_dispatcher = new EventDispatcher(this);
_timer.addEventListener(TimerEvent.TIMER, onTimer);
_timer.start();
}
private function onTimer(event:TimerEvent):void
{
_dispatcher.dispatchEvent(new Event("tick"));
}
/* IEventDispatcher */
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false) : void
{
_dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
public function dispatchEvent (event:Event) : Boolean
{
return _dispatcher.dispatchEvent (event);
}
public function hasEventListener (type:String) : Boolean
{
return _dispatcher.hasEventListener (type);
}
public function removeEventListener (type:String, listener:Function, useCapture:Boolean = false) : void
{
_dispatcher.removeEventListener (type, listener, useCapture);
}
public function willTrigger (type:String) : Boolean
{
return _dispatcher.willTrigger(type);
}
}
}

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
public class Main extends Sprite
{
private var _ticker:IEDClass;
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
_ticker = new IEDClass();
_ticker.addEventListener("tick", onTick);
}
private function onTick(event:Event):void
{
trace(event.target, event.currentTarget); // "[object IEDClass] [object IEDClass]"
}
}
}