zoukankan      html  css  js  c++  java
  • 多态(虚方法)

    使用虚方法实现“多态”

    背景:

        class Animal
        {
            public string name; public int age; public float temperature;
            public  void Eat()
            {
                Console.WriteLine("Animal 吃东西");
            }
        }
        class Wolf : Animal
        {
            public string color;
            public void hunt(){}
            public  void Eat()
            {
                Console.WriteLine("Wolf 吃 羊");
            }
        }
        class Fish:Animal
        {       
            public void Swim() { }
            public void Eat()
            {
                Console.WriteLine("Fish 吃东西 小Fish");
            }
        }   

    在main方法中使用这段代码

                Wolf hui = new Wolf();
                hui.Eat();
               
                Fish jin = new Fish();
                jin.Eat();

    发现,使用的Eat方法都是派生类的。

    但是,如果这样使用

                Animal a;
                a = hui;           
                a.Eat();   

                a = jin;            
                a.Eat();

    使用的Eat方法,却是基类的!!!

    这显然不是我们想要的。

    我们需要,根据对象运行时,所属类的不同,调用相应类的方法。

    这就是多态

    关键词 virtual  override。在基类中的方法,加上修饰符virtual ,在派生类中加上override 。代码如下:

        class Animal
        {
            public string name; public int age; public float temperature;
            public virtual  void Eat()
            {
                Console.WriteLine("Animal 吃东西");
            }
        }
        class Wolf : Animal
        {
            public string color;
            public void hunt(){}
            public override void Eat()
            {
                Console.WriteLine("Wolf 吃 羊");
            }
        }
        class Fish:Animal
        {       
            public void Swim() { }
            public override void Eat()
            {
                Console.WriteLine("Fish 吃东西 小Fish");
            }
        }   

    再看看程序运行的结果

  • 相关阅读:
    Delphi中SQL语句配置参数代码示例
    Delphi中treeview的使用部分
    Delphi listview使用部分总结代码
    如何用Delphi编写自己的可视化控件
    关于treeview节点图标的帖子
    Delphi调用存储过程
    DELPHI的开源控件集(转自http://xieyunc.blog.163.com/)
    雨巷(A Lane in the Rain)
    五一过去了,新的开始
    好好的学习,做个有本事的人:),好好的玩,做个快乐的人!
  • 原文地址:https://www.cnblogs.com/imxh/p/2442626.html
Copyright © 2011-2022 走看看