Extension and Overlay are the same. This is just a matter of terminology. Extending and overlaying involves copying a component from / libs / (or another base library) to the / apps node and changing the behavior.
Overriding is like an extension, but the only difference is that you modify the sling:resourceSuperTypecomponent so that its behavior changes completely (hence, it is redefined).
:
https://docs.adobe.com/docs/en/aem/6-3/develop/components/components-basics.html