What is the difference between abstraction and encapsulation? How does inheritance help in code reusability? Give an example. What is polymorphism? Explain compile-time and runtime polymorphism. What is the difference between a class and an object in OOP?