What is the difference between method overloading and method overriding? How does virtual table (vtable) dispatch work under the hood?