父类引用指向子类对象

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

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

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


你可能感兴趣的:(C#,父类引用指向子类对象)