多态

1 多态

   多态是指两个或多个属于不同类的对象,对于同一个消息(方法调用)作出不同响应的方式。 一个基类的引用符,可以指向多种派生类对象,具有多种不同的形态,这种现象叫多态性。

2 虚方法-重写

   同样都是继承了同一个父类,但是父类中的方法并不适用任何一个子类,那么在这就需要子类重新编写这个方法的主体。

所有的类都可以当做父类,都可以有虚方法。Override 是对父类的方法进行实现,这个重新设计的的基础是方法名和参数完全一致,但是内部实现体不一样。

方法重写的条件:

      A、方法必须一样

     Boverride方法和 virtual方法具有相同的访问级别修饰符,访问修饰符允许被放大

     C、返回类型必须一样   

步骤:

1)需要父类同意子类可以重新编写自己的方法 ( virtual -  虚方法)

 访问修饰符 virtual 返回类型 方法()

               {

               //方法体

               }

(2)子类只能重写父类允许重写的方法,只能重写虚方法(override - 重写)

 访问修饰符 override 返回类型 方法()

               {

               //方法体

               }

例如:

//父类Fly

 public virtual string fly1()

        {

            return "我会飞!";        

        }

//子类a

public override   string fly1()

        {

            return "我有翅膀!";

        }

//主函数

 a cs1 = new a();       

 Console.WriteLine(cs1.fly1());

3 抽象类abstract

     抽象类本身无法产生实例对象,而且抽象类包含了一个以上的抽象方法,这些方法只是提供函数名称,并没有定义如何具体实现,由继承的派生类实现,

派生类同时必须实现所有抽象类的方法,否则其本身将成为另外一个抽象类。

    需要我们注意的一点是,当派生类重写抽象类的方法时,要使用override关键字来重写抽象类所定义的方法

     抽象类只能被继承,不能被实例化,抽象类的抽象方法是虚方法

     有抽象方法的类,一定是抽象类;抽象类中不一定只有抽象方法。

//父类-抽象类

 public abstract class cx

    {

         public abstract string ren();      

}

//子类

 public class cx1:cx   

 {

         public override string ren()

         {        

         return "人";

         }       

  }

4 接口interface

     接口实际上就是一个类,只是这个类只声明成员,而不具体实现。故不能创建接口的实例继承自接口的类必须实现接口的所有方法。接口也能很好的体现多态性,当函数中参数类型为基接口时,则不管是什么类,只要这个类继承于基接口,均可以根据实例化情况来调用。 

1接口、抽象类的相似之处和不同:

  接口和抽象类均不能实例化,而且要求派生类实现其抽象方法,但不是必须全部实现。

    但抽象类有更多的功能:可以由子类继承,而且可以包括状态数据和具体方法。

2接口和类的区别:

  接口不能从类继承,而类可以实现接口(继承接口);

  接口可以继承多个接口,而类虽然可以继承多个接口,却只能继承一个类。

  接口成员必须是方法、成员属性、事件或索引器。(注意无数据成员)

  所有接口成员必须能公开访问

//接口

    public  interface jk

    {

        string kan();

}

//子类

 public class cx1:cx,jk

    {

         public override string ren()

         {        

         return "人";

         }

         public string kan()

         {

             return "看";

         }

   } 

总结:面向对象的三大特征

        封装:保证对象自身数据的完整性、安全性

        继承:建立类之间的关系,实现代码复用、方便系统的扩展

        多态:相同的方法调用可实现不同的实现方式

 

原文地址:https://www.cnblogs.com/zhang-dandan-1/p/5858039.html