• <面向对象>--多态


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

     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来实现父类中的抽象方法。

  • 相关阅读:
    POJ-2112 Optimal Milking(floyd+最大流+二分)
    网络流之最大流与最小费用流入门&&模板
    0316 校赛训练赛3 解题报告
    string的子串截取
    hash题目大汇总
    Codeforces Round #235 (Div. 2)
    poj2002 -- 点的hash
    hlgHCPC2014校赛训练赛 1 BB.序列问题
    树状数组模板,RMQ模板
    从未放弃--2014.1.21
  • 原文地址:https://www.cnblogs.com/thq1218/p/4468167.html
Copyright © 2020-2023  润新知