zoukankan      html  css  js  c++  java
  • 面向对象4-3多态性

    一、virtual(虚拟的)  override(覆盖)

    根据上一篇得知,fly是bird父类,在bird中引用父级中的方法fly1(),返回值为"我可以飞"。但是在bird类中,引用父类的fly1()方法不能满足要求,需要返回的输出值为“我可以靠自己的翅膀飞行”。以此类推,在fly的各种子类中,都想表达出子类自身所具有的特征,那么此时,就需要对父类fly的方法进行修改,需要进行设置虚函数(virtual)。

    //父类格式
    public virtual 数据类型 名字()
    {
    执行语句
    }
    //子类中
    public override 数据类型 数据名()
    {
    新的执行语句
    }
    //此时重新调用父类中的方法,就会显示新的执行语句!

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

    (1)需要父类同意子类可以重新编写自己的方法,关键词:virtual,在public之后

    (2)子类只能重新写父类允许重写的方法,只能重写虚方法。关键词override,在public之后。

    2,所有的类都可以当做父类,都可以有虚方法。

    二、接口 interface

    抽象类函数,关键词;abstract。抽象函数不能实例化。需要被继承,在子类里面调用其方法。

    举例子吧

    建立ren类

    //在ren类里面设置虚函数
            public abstract string chi();       //注意,没有“{执行语句}”,因为即使写了,在子类中也不引用,需要再子类中重新编写
            public abstract string shui();
            public abstract string dong();
            public string yue()                  //不是抽象方法,为了证明抽象类里面也可以有非虚类函数
            {
                return "约会去了!!";
            }
            public virtual string yuyan()       //不是抽象方法,为了证明抽象类里面也可以有虚类函数
            {
                return "我会说hua!";
            }

    抽象类函数就是为了被继承而出现的(他的建立就是为了当父类)。

    普通的类中所有的方法都变为虚方法,没有人用最基础的方法(父类方法),在子类中需要重新编写,那么就不需要那么费劲的把普通类中的方法全部写完,于是,直接定义为抽象类,并且都写成抽象方法。

    只声明方法的名称和返回值,具体方法是什么,继承过去以后自己(在子类中)去实现。

    //新建一个nan类,继承ren类
    public class nan:ren
        {
            public override string chi()   //跟virtual一样用override
            {
                return "大口大口的吃!";
            }
            public override string shui()
            {
                return "在女人身边睡觉!";
            }
            public override string dong()
            {
                return "打篮球";
            }
    //然后在main函数里面实例化nan,就可以调用nan和ren里面的函数了。

    抽象方法一定在抽象类中。

    有抽象方法的类,一定是抽象类。

    抽象类中不一定只有抽象方法,也可以由其他的方法。

    为了让nan这个类更加完善,还需要继承其他的类(如yule,gongzuo),那就需要接口了。

    父类只能有一个,其余的都是借口。就像亲爹(父类)只有一个,其余的为干爹(接口interface)。

    //新建gongzuo类
    public interface gongzuo  //interface 原先位置为class。
        {
         string jineng();   //为抽象方法。数据类型+数据名字()。
    
         string didian();  
         
    
        }
    //然后在nan类继承ren类的后面写个逗号,加上gongzuo,如下图,这样接口就好了。

    然后就需要在nan类里面写接口里面的方法(必须写)

    public class nan:ren
        {
            public override string chi()   
            {
                return "大口大口的吃!";
            }
            public override string shui()
            {
                return "在女人身边睡觉!";
            }
            public override string dong()
            {
                return "打篮球";
            }
              public  string jineng()
           {
              return "巧妹子";
           }
           public string didian()
           {
               return "夜色";
           }
    //在main函数里面调用就可以了。

    接口类里面的方法都是抽象方法(数据类型+数据名字()),没有其他一点儿东西。全部内容需要全部在子类中实现(在子类中一个方法都不能少)。

    完!!!

  • 相关阅读:
    ubuntu网络配置相关知识(转载)
    git 冲突解决(转载)
    redmine后台运行命令
    CentOS配置网卡,重启网络显示:Device does not seem to be present(转载)
    解决Xshell和vim中文乱码(转载)
    REDHAT6.2配置yum源(64位)(转载)
    Doki Doki Literature Club ZOJ
    CONTINUE...? ZOJ
    Magic Points ZOJ
    Cash Machine (POJ 1276)(多重背包——二进制优化)
  • 原文地址:https://www.cnblogs.com/wwz-wwz/p/5857577.html
Copyright © 2011-2022 走看看