Overriding is used to modify and provide a new implementation of the method inherited from a base class.
Method overriding is a crucial concept in object-oriented programming that allows a derived class to provide a specific implementation for a method that is already defined in its base class. The overriding method in the derived class replaces the original implementation in the base class during runtime, achieving polymorphic behavior. Here are some use cases and examples of method overriding in real applications:
1. Polymorphism and Runtime Flexibility: Overriding enables polymorphism, where you can treat objects of different derived classes uniformly through their common base class. This allows you to achieve runtime flexibility by switching implementations based on the actual type of the object.
Example:
csharp
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a generic shape.");
}
}
public class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}
public class Square : Shape
{
public override void Draw()
{
Console.WriteLine("Drawing a square.");
}
}
public class Program
{
public static void Main(string[] args)
{
Shape shape1 = new Circle();
Shape shape2 = new Square();
shape1.Draw(); // Output: "Drawing a circle."
shape2.Draw(); // Output: "Drawing a square."
}
}
2. Customization and Specialization: Method overriding allows you to customize the behavior of derived classes according to their specific requirements. Each derived class can provide its own implementation of the method, tailored to its unique characteristics.
Example:
csharp
public class Vehicle
{
public virtual void Start()
{
Console.WriteLine("Starting a generic vehicle.");
}
}
public class Car : Vehicle
{
public override void Start()
{
Console.WriteLine("Starting the car's engine.");
}
}
public class Bike : Vehicle
{
public override void Start()
{
Console.WriteLine("Kicking the bike to start.");
}
}
public class Program
{
public static void Main(string[] args)
{
Vehicle vehicle1 = new Car();
Vehicle vehicle2 = new Bike();
vehicle1.Start(); // Output: "Starting the car's engine."
vehicle2.Start(); // Output: "Kicking the bike to start."
}
}
3. Extending Base Class Functionality: Overriding methods can extend the functionality of a base class without modifying its core behavior. You can add new behavior in derived classes while preserving the original behavior of the base class.
Example:
csharp
public class Shape
{
public virtual void Draw()
{
Console.WriteLine("Drawing a shape.");
}
}
public class Circle : Shape
{
public override void Draw()
{
base.Draw(); // Calling the base class implementation
Console.WriteLine("Drawing a circle.");
}
}
public class Program
{
public static void Main(string[] args)
{
Shape shape = new Circle();
shape.Draw();
/* Output:
Drawing a shape.
Drawing a circle.
*/
}
}
In summary, you should use method overriding in real applications when you need to achieve polymorphism, customize behavior for derived classes, extend the functionality of a base class, adhere to interfaces or abstract methods, and maintain flexibility and runtime adaptability. Method overriding is a powerful tool that promotes code reusability, flexibility, and extensibility in object-oriented programming.