多态是面向对象的一个非常重要的特征。而多态有三个必要条件是
1.要有继承(实现implements)
2.要有重写(overwrite & override)
3.父类引用指向子类对象( 例子[ Animal a =new Dog(); ])
这篇博客说的就是父类引用指向子类对象。
翻译过来就是定义一个父类的引用,但指向的是子类的对象。
我写了一个父类引用指向子类的小例子
这是父类Animal
class Animal //定义父类Animal
{
private String type = "Animal";
public virtual void showLegs()
{
Console.WriteLine("This is an {0} , Animal always has legs", type);
}
}
下面分别是子类Dog和子类Glede
class Dog:Animal//子类Dog继承父类Animal
{
private String type = "Dog";
public override void showLegs()
{
Console.WriteLine("This is a {0} , Dog has four legs", type);
}
}
class Glede : Animal//子类Glede继承父类Animal
{
private String type = "Glede";
public override void showLegs()
{
Console.WriteLine("This is a {0} , Glede has two legs", type);
}
}
客户端的代码是这样的
Animal a1 = new Animal();
Animal a2 = new Dog(); //定义一个Animal的引用指向的是子类的Dog对象
Animal a3 = new Glede(); //定义一个Animal的引用指向的是子类的Glede对象
a1.showLegs();
a2.showLegs();
a3.showLegs();
Console.ReadLine();
从内存上说 假设类Animal的内存是x,类Dog占用的内存是y.
那么a1所分配内存就是x+y,而a2所分配内存就是y。
内存上减少了。
父类引用指向子类对象还有一个好处就是为以后修改方便,那么以后用到Animal的地方,用dog实例,cat实例都可以取代,不用改实例名了。说玄乎一点,也就体现了面向对象“多态”的特性。
我称这种编程为‘’可持续性编程‘’。