对多态性概念还是有点模糊,突然好奇动手写了一下代码,感觉明白了。
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();
}
}
}
最后还有一种情况值得注意:
子类永远可以转换成父类。换句话说,由小指向大永远不会有问题。
如果父类的引用是子类实例那么可以通过类型转换完成。否则会报错。