谈谈我对C# 多态的理解
面向对象三要素:封装、继承、多态。
封装和继承,这两个比较好理解,但要理解多态的话,可就稍微有点难度了。今天,我们就来讲讲多态的理解。
我们应该经常会看到面试题目:请谈谈对多态的理解。
其实呢,多态非常简单,就一句话:调用同一种方法产生了不同的结果。
具体实现方式有三种。
一、重载
重载很简单。
public string GetValue(string x)
{
return x;
}
public string GetValue(string x, string y)
{
return x+y;
}
//调用
string myValue=GetValue("测试");
string myValue2=GetValue("测试","方法");//调用了GetValue同一种方法,只是多了个参数,但还是算得上“同一种方法”。
二、重写父类中的虚方法
public class BaseClass
{
public virtual void GetValue() //virtual关键字,供后面的子类重写该方法
{
Console.WriteLine("这是个虚方法");
}
}
public class MyClass: BaseClass
{
public override void GetValue()
{
Console.WriteLine("MyClass重写了基类的虚方法");
}
}
public class NewClass: BaseClass
{
public override void GetValue()
{
Console.WriteLine("NewClass重写了基类的方法");
}
}
public class Program
{
static void Main()
{
BaseClass baseClass=new BaseClass();
MyClass myClass=new MyClass();
NewClass newClass=new NewClass();
//在这里你会无意间想到一句很经典的话:不同的对象调用了同一种方法产生了不同的行为
baseClass.GetValue();//这是个虚方法
myClass.GetValue();//MyClass重写了基类的虚方法
newClass.GetValue();//NewClass重写了基类的方法
}
}