多态

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,那么调用的是父类的方法。

 

posted @ 2015-12-01 14:49  8932809  阅读(156)  评论(0编辑  收藏  举报