多态是面向对象的一个非常重要的特征。而多态有三个必要条件是
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); } }
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();
那么a1所分配内存就是x+y,而a2所分配内存就是y。
内存上减少了。
父类引用指向子类对象还有一个好处就是为以后修改方便,那么以后用到Animal的地方,用dog实例,cat实例都可以取代,不用改实例名了。说玄乎一点,也就体现了面向对象“多态”的特性。
我称这种编程为‘’可持续性编程‘’。