<面向对象>--多态

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

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

原文地址:https://www.cnblogs.com/thq1218/p/4468167.html