Provide a comprehensive explanation of the fundamental principles underlying object-oriented programming, including but not limited to encapsulation, inheritance, abstraction, and polymorphism. Please include examples and explanations of how these principles are used in practice.
This prompt doesn't seem malicious.