父类引用指向子类对象

来源:互联网 发布:华为交换机mac过滤 编辑:程序博客网 时间:2024/06/05 09:09

多态是面向对象的一个非常重要的特征。而多态有三个必要条件是         

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实例都可以取代,不用改实例名了。说玄乎一点,也就体现了面向对象“多态”的特性。

我称这种编程为‘’可持续性编程‘’。


0 0