Overriding: This is a concept in object-oriented programming where a subclass provides its own implementation for a method that is already defined in the superclass.
Polymorphism: As mentioned earlier, polymorphism allows objects belonging to different classes, including subclasses, to respond differently based on their own implementation of shared methods.
Abstract Classes: These are classes that cannot be instantiated but serve as blueprints for other classes. Subclasses must implement any abstract methods defined in the abstract class.