C#面向对象编程三大基本特征之-----多态

    当一个派生类继承于一个基类时,该派生类在方法和属性上与基类有一定的重合,所以这些派生类的实例对象可以直接调用基类的方法,而无须进行类型转换。

    多态性则更推进了一步。在派生于同一个基类的不同对象上执行任务时,多态性是一种极为有效的方式。

    所谓多态,就是把某个基本类型的变量(类实例)赋予其派生类型的变量,然后通过强制类型转化把基类的变量转化为派生类型的变量,然后调用派生类的方法。

    要注意的是,在使用多态时,并不是只有共享一个父类的类才能利用多态性。只要子类和孙子类在继承层次结构中有一个相同的类,他们就可以以相同的方式利用多态性。

    使用多态的实质,就是想用父类实例来调用子类方法,但是又不能直接调用,即使赋予了子类变量也不能直接调用子类方法,必须曲线救国一下,那就是强制类型转化,把父类的变量转换为子类变量,然后再调用子类方法。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Chapter08多态性实例 { //定义一个基类Animal,以及用三个不同类成员访问修饰符修饰的基类方法 public class Animal { //Private成员只能由类中的代码访问 private void EatFood() { Console.WriteLine("This animal can eat food"); } public void Breed() { Console.WriteLine("This animal can breed child"); } //Protected 成员只能由类和派生类中的代码访问 protected void Run() { Console.WriteLine("This animal can run rapidly"); } } //定义第一个派生类Chicken,继承于Animal类 public class Chicken: Animal { public void Cluck() { Console.WriteLine("The voice of chicken is cluck"); } private void LayEgg() { Console.WriteLine("The chicken can lay eggs"); } //static void Main(string[] args) //{ // Chicken a = new Chicken(); // a.Run(); //} } //定义第二个派生类Cow,继承于Animal类 public class Cow : Animal { public void Moo() { Console.WriteLine("The voice of cow is Moo"); } public void SupplyMilk() { Console.WriteLine("The Cow can supply milk"); } public void EatFood() { Console.WriteLine("The Cow has a special method to eat food"); } } class Program { static void Main(string[] args) { //常规使用派生类对象调用基类方法,无须进行类型转化,可以直接调用. //注意,这时只能使用基类中的Public方法 Cow MyCow = new Cow(); MyCow.Breed(); Chicken MyChicken = new Chicken(); MyChicken.Breed(); //使用多态第一步-------将派生类变量赋值给基类变量。这种情况下,基类变量不能调用基类的私有方法。 Animal myAnimal = MyCow; //使用多态第二步-------不需要进行数据强制类型转化,可以直接用该变量调用基类方法,因为虽然被赋予了派生类变量,但实质还是基类变量 myAnimal.Breed(); //使用多态的实质就是:让父类来使用子类的方法,但是下面的方式是错误的,即使父类变量被赋予了子类变量,也不能直接用父类变量调用子类方法。 //myAnimal.Moo(); //使用多态第三步-------但是通过强制类型转化,可以把基类变量转化为派生类变量,赋值给一个新的派生类变量,调用派生类方法。 Cow MyNewCow = (Cow)myAnimal; MyNewCow.Moo(); MyNewCow.EatFood(); Console.ReadKey(); } } }

 

总结起来,可以将多态使用总结为以下的多态三部曲:

1,派生赋基类

2,基类强转换

3,再用派生法

注意,以上的操作对象一直都是基类对象

你可能感兴趣的:(编程,String,C#,Class,任务)