zoukankan      html  css  js  c++  java
  • <面向对象>--多态

    多态:不是一个新东西。主要是在继承的基础上实现出来的。
    多态分类:静态多态(编译多态),动态多态(运行多态)。
    静态多态(编译多态):方法重载来实现的。

     1 namespace ConsoleApplication12
     2 {
     3     class Program
     4     {
     5         class Dog
     6         {
     7             public void Bark()
     8             {
     9                 Console.WriteLine("旺旺");
    10             }
    11             public void Bark(string bone)
    12             {
    13                 Console.WriteLine("我喜欢吃骨头。旺旺");
    14             }
    15             public void Bark(bool pain)
    16             {
    17                 Console.WriteLine("呼呼~旺旺");
    18             }
    19         }
    20         static void Main(string[] args)
    21         {
    22             Dog d = new Dog();
    23             d.Bark("两块大骨棒");
    24         }
    25     }
    26 }


    动态多态(运行多态):继承和重写来实现的。

    多态的实现是:父类的引用指向子类的实例。当指向不同子类的时候,父类引用调用子类方法的时候,呈现出不同的形态。

    例子:
    1.喂动物
    2.中国人、美国人、野人一起吃饭

    namespace ConsoleApplication12
    {
        class Program
        {
            class Animal
            {
                public virtual void Eat()
                {
                    Console.WriteLine("动物在吃东西");
                }
            }
            class Lion:Animal
            {
                public override void Eat()
                {
                    Console.WriteLine("狮子大口吃肉");
                }
            }
            class Monkey : Animal
            {
                public override void Eat()
                {
                    Console.WriteLine("正在吃桃子");
                }
            }
            class Panda:Animal
            {
                public override void Eat()
                {
                    Console.WriteLine("正在吃竹子");
                }
            }
            class Feeder
            {
                public void Feed(Animal dongwu)
                {
                    dongwu.Eat();
                }
            }
            
            static void Main(string[] args)
            {
                Animal dw;
               
                Console.WriteLine("请选择要喂养的动物。1.狮子2.猴子3.熊猫");
                string s = Console.ReadLine();
                switch (s)
                {
                    case "1":
                        dw = new Lion();
                        break;
                    case "2": 
                        dw=new Monkey();
                        break;
                    case "3":
                        dw = new Panda();
                        break;
                        default:
                        dw = new Animal();
                        break;
                }
    
                Feeder f = new Feeder();
                f.Feed(dw);
    
            }
        }
    }
    喂动物


    抽象类:
    对事物进行高度的抽象,抽象到一定程度,无法去具体描述。
    抽象方法:只有方法的声明,没有方法的实现。只有函数名、输入形参、返回类型,没有函数体。
    关键词:abstract
    抽象类与抽象方法的关系:
    1.含有抽象方法的类一定是抽象类
    2.抽象类不一定包括抽象方法。

    抽象类是无法被实例化的类。不能new出来。
    遇到抽象类一般来说就是两种处理思路:1.找该抽象类的派生类,使用其派生类。2.自己继承此抽象类,实现其派生类。

    对于抽象方法,子类也必须使用override来实现父类中的抽象方法。

  • 相关阅读:
    从客户端(Content="<p>666</p>")中检测到有潜在危险的 Request.Form 值。
    VS插件集
    Carmack在QUAKE3中使用的计算平方根的函数
    自动匹配HTTP请求中对应实体参数名的数据(性能不是最优)
    webapi单元测试时出现的ConfigurationManager.ConnectionStrings为空错误
    @@IDENTITY在加触发器时返回错误的ID值
    Protobuf完整实例
    Apache配置多个监听端口和不同的网站目录的简单方法[转]
    ThinkPHP 小技巧
    复选框 ajax取得后台页面
  • 原文地址:https://www.cnblogs.com/thq1218/p/4468167.html
Copyright © 2011-2022 走看看