If you are experienced in OOP, you may wonder how this is possible, but chances are that you already know about it.
In haXe, every time you write a class, an enum, an interface, or a typedef, you are defining a new type. This type has the same path (the same name) as the class, enum, interface, or typedef you are writing.
In haXe, a class can extend another class. In such a case, not only does it have all of the fields (that is properties and functions) of all its parent classes, but also all the types that its parent classes have (in addition to its own type).
What that means is that, for example, when a function wants a parameter of type
A, you can pass an instance of
B to your ...