多态
namespace Protected
{
class Program
{
static void Main(string[] args)
{
Parent p = new Child();
Console.WriteLine(p.X);
Console.WriteLine(p.test());
Console.WriteLine(p.test1());
Console.ReadLine();
}
}
public class Parent
{
public Parent()
{
Add(2);
}
public int X = 10;
protected int Add(int y)
{
return X += y;
}
public virtual int test()
{
return 0;
}
public int test1()
{
return 0;
}
}
public class Child : Parent
{
public int X = 9;
public override int test()
{
return 15;
}
public int test1()
{
return 15;
}
}
}
输出依次为12、15、0 可以看到
Parent p = new Child();
这里其实调用的是父类的X,也就是声明了一个孩子的人类对象。
这样做的好处是,比如有个计算器的基类,现在有一个加法运算类,如果以后再次扩展,只需加一个减法的运算类继承基类、然后直接 基类 a=new 减法类() 就可以了,不需要改变基类中的代码。
直观的解释:
对外接口可能只是父类,这样可以方便你在内部扩展子类,比方说你又增加了一个子类,外面接口不用改变
这就好比,你学习计算机学习的是面向通用的计算机的知识,学好以后,你去具体使用计算机,那么使用的是某个品牌某个型号的计算机,但是你不用关心它具体怎么实现的,你用通用的知识就可以驾驭它。
关于后两个值的解释:
另外需要注意ovrride,如果子类中不重写父类的方法test,那么调用的是父类的方法。
浙公网安备 33010602011771号