Overriding Event.clone() is a required part of the API contract:
You are required to override the Event.clone() method in your Event subclass. The clone() method returns a cloned copy of the event object by setting the type property and any new properties in the clone. Typically, you define the clone() method to return an event instance created with the new operator.
public class MyEvent extends Event {...}
public class MyEvent extends Event
{
...
override public function clone():Event {
return new MyEvent(...);
}
...
}