C# 学习之旅(二)简单的继承多态介绍

来源:互联网 发布:自制mac安装盘 编辑:程序博客网 时间:2024/06/08 05:10

     继承

    C#中,每个类只能继承一个类


    virtual和override关键字

    C#中,类的函数中有关键字virtual,那么它是可以被继承它的类加关键字 override 重写的,当然也可以不被重写,同样是可以使用的,但你是不能override一个没有关键字virtual的函数的。

    

     如果一个类的函数没有加关键字virtual,那么在继承的类中也是可以改写的,只需要在函数中添加关键字new告诉程序隐藏起父类的同名函数即可,如果不加也是可以编译通过,只是会有一个warning提示。


     override是告诉程序我要改写父类的方法,而new则是告诉程序隐藏起父类的方法,它们的实现是不一样的


     sealed关键字:表示该类无法被继承


   class Program    {        static void Main(string[] args)        {            Dog dog = new Dog();            dog.Bite();            dog.Age = 10;            Console.WriteLine(dog.getAge());            dog.BiteMan();        }    }    class Animal    {        public int Age;        public virtual void Bite()        {            Console.WriteLine("animal bite");        }        public virtual int getAge()        {            return Age;        }        public void BiteMan()        {            Console.WriteLine("Animal bite man");        }    }    sealed class Dog :Animal    {        public override void Bite()        {            Console.WriteLine("dog bite");        }        public new void BiteMan()        {            Console.WriteLine(" bite man");        }    }    //无法继承    class Cat : Dog    {    }


补充的:

    关于override和new关键字还有一点,如果我是用父类类型来声明一个子类的话,那么override的函数是子类的函数,而new关键字的函数是父类的函数




继承关系的实例化顺序:首先调用父类的构造函数,然后是子类的构造函数


重载:

    class Program    {        static void Main(string[] args)        {            PrintHello();            Complex c1 = new Complex();            Complex c2 = new Complex();            c1.number = 2;            c2.number = 3;            Console.WriteLine((c1 + c2).number);        }        //可以传参不同重载,但不能传参一样但返回值不同        public static void PrintHello()        {            Console.WriteLine("hello world");        }        public static void PrintHello(string toWho)        {            Console.WriteLine("hello {0}", toWho);        }            }    //运算符重载    class Complex    {        public int number;        public static Complex operator +(Complex c1,Complex c2)        {            Complex c = new Complex();            c.number = c1.number + c2.number;            return c;        }    }



多态:一个形态,多个功能

静态多态:编译时候就已经知道,主要通过程序重载来实现

动态多态:只有程序具体运行时候才知道是什么功能,通过override重写达到目的


    class Program    {        static void Main(string[] args)        {            Human human1 = new Man();            Human human2 = new Woman();            human1.CleanRoom();            human2.CleanRoom();        }     }    class Human    {        public virtual void CleanRoom()        {            Console.WriteLine("Human Clean Room");        }    }    class Man:Human    {        public override void CleanRoom()        {            Console.WriteLine("Man clean room slowly");        }    }    class Woman:Human    {        public override void CleanRoom()        {            Console.WriteLine("Woman clean room quickly");        }    }}



      

0 0