zoukankan      html  css  js  c++  java
  • 多态

    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 "看";

             }

       } 

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

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

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

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

     

  • 相关阅读:
    springboot配置springbatch+mybatisplus对mybatis sqlsessionfactory的配置
    bytes的hex和fromhex函数
    python 锁 装饰器
    socket 客户端和服务端
    socket 客户端和服务端思考
    socket 发送类
    socket 服务端
    OSError: [WinError 10048] 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。
    for循环执行顺序流程
    Chromedriver的安装教程
  • 原文地址:https://www.cnblogs.com/zhang-dandan-1/p/5858039.html
Copyright © 2011-2022 走看看