c#学习历程3

多态

class Animal
    {
        private int age;
        public int Age
        {
            set{ age = value;}
            get{ return age;}
        }
        public virtual void Voice()
        {
            Console.WriteLine ("Animal");
        }
    }
class House:Animal
    {
        public override void Voice()
        {
            Console.WriteLine ("House");
        }
    }
class Sheep:Animal
    {
        public override void Voice()
        {
            Console.WriteLine ("Shpeep");
        }
    }


//多态(一个方法多种状态)
            Animal a = new House ();
            Animal b = new Sheep ();
            Method (a);
            Method (b);
            //如果没虚函数,则10个动物需要写10个方法,每次不同对象调用method,
            //就需要写该对象的方法,如果有虚函数,则形参只需要为父对象,
            //通过父类指向类实现调用不同子类的方法,替代了原来的10种子类的方法,从而实现多态

只有虚方法才能被重写

abstract class Class
    {
        //抽象类相当于c++纯虚函数
        public abstract void print();
    }
    class ClassA:Class
    {
        //可以重写抽象类(abstract)和虚函数(virture)override
        public override void print()
        {
            Console.WriteLine ("Class A");
        }
    }
    class ClassB:ClassA
    {
        public override void print()
        {
            Console.WriteLine ("Class B");
        }
    }

 子类继承与父类的虚方法,虽然该子类重写虚方法,但它还是虚方法,下代们的子类可以重写虚方法  

隐藏
子类可以隐藏父类的方法,不过在c#中会发出警告,添加一个new就ok了
使用new修饰,可以隐藏同名函数。

class ClassA//没有指定继承,则默认继承object
    {
        public int x;
        public int y;
        public ClassA(int _x,int _y)
        {
            x = _x;
            y = _y;
        }
        public void Method()
        {
            Console.WriteLine ("classA Method");
        }
    }
    class ClassB:ClassA
    {
        public int z;
        public ClassB(int _x,int _y,int _z):base(_x,_y)//只能用base(父类)
        {
            z=_z;
        }
        public new void Method()
        {
            Console.WriteLine ("classB Method");
        }
    }


          

posted on 2016-09-10 10:05  游戏爱好者  阅读(126)  评论(0编辑  收藏  举报

导航