C#父类与子类(多态性)

来源:互联网 发布:起名网站源码 编辑:程序博客网 时间:2024/05/18 03:05

对多态性概念还是有点模糊,突然好奇动手写了一下代码,感觉明白了。

using System;namespace 父类子类{    class Person    {        public Person()        {            Console.WriteLine("我是父类构造函数");        }        public virtual void SayHello()        {            Console.WriteLine("父类SayHello");        }    }    class Son : Person    {        public Son()        {            Console.WriteLine("我是子类构造函数");        }        public override void SayHello()        {            Console.WriteLine("子类SayHello");        }    }    class Program    {        static void Main(string[] args)        {            Person p1 = new Person();            p1.SayHello();            Console.WriteLine("===============================");            Son s1 = new Son();            s1.SayHello();            Console.WriteLine("===============================");            Person p2 = new Son();            p2.SayHello();            Console.WriteLine("===============================");            Son s2 = new Son();            Person ps2 = (Person)s2;            ps2.SayHello();            Console.WriteLine("===============================");            Person p3 = new Son();            Son s3 = (Son)p3;            s3.SayHello();        }    }}


运行结果如下




最后还有一种情况值得注意:


子类永远可以转换成父类。换句话说,由小指向大永远不会有问题。

如果父类的引用是子类实例那么可以通过类型转换完成。否则会报错。