重载(Overloading)和重写(Overriding)都是面向对象编程中的重要概念,它们的作用和用途不同。
重载指在一个类中定义了多个方法,这些方法具有相同的名称但不同的参数列表,可以根据传入的参数的不同来执行不同的操作。重载可以实现多态性,提高代码的复用性。
重写指子类重新定义了父类中已有的方法,方法名、参数列表和返回类型必须和父类中的一模一样,但是可以改变方法的实现。重写可以实现运行时多态性,提高代码的灵活性。
重载和重写的区别主要在于:
方法名、参数列表和返回类型:重载方法名相同,参数列表和返回类型不同;重写方法名、参数列表和返回类型都必须与父类中的方法一样。
定义:重载方法定义在同一个类中,重写方法定义在子类中。
作用:重载可以实现编译时多态性,提高代码的复用性;重写可以实现运行时多态性,提高代码的灵活性。
调用方式:重载方法的调用取决于传入的参数类型和个数;重写方法的调用取决于对象的实际类型。
下面是一个简单的重载和重写的例子:
// 重载示例
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(double a, double b)
{
return a + b;
}
}
// 重写示例
public class Animal
{
public virtual void Speak()
{
Console.WriteLine("Animal speaks.");
}
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("Dog barks.");
}
}
public class Cat : Animal
{
public override void Speak()
{
Console.WriteLine("Cat meows.");
}
}
Animal animal1 = new Animal();
Animal animal2 = new Dog();
Animal animal3 = new Cat();
animal1.Speak(); // 输出:Animal speaks.
animal2.Speak(); // 输出:Dog barks.
animal3.Speak(); // 输出:Cat meows.