<面向对象>--多态
多态:不是一个新东西。主要是在继承的基础上实现出来的。
多态分类:静态多态(编译多态),动态多态(运行多态)。
静态多态(编译多态):方法重载来实现的。
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来实现父类中的抽象方法。