The reason why it is done with classes instead of interfaces is to insure backwards compatibility in a simpler way.
If in the future there is another event that should be added you can't add it to this interface without breaking any existing plugin that depends on earlier versions of this plugin because then you'll break binary compatibility since the existing classes don't implement the new method.
That is why it is done with abstract classes because then you can just add a new method with a default implementation and all existing classes can be left as is.