覆盖和重载以及this与base

覆盖

定义:发生在继承关系里面,通过vitrual和override进行实现,函数名和参数相等。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;



public class Data
{
    public string name;
    public int age;
    public string gender;
    
    public virtual void Show()
    {
        Debug.Log("这是某某某的身份信息");
    }

}
public class ZhangSan: Data
{
    
    public ZhangSan ()
    {
        name = "张三";
        age = 18;
        gender = "男";
        
    }
    public override void Show()
    {
        Debug.Log("这是" + name + "的身份信息");
    }
}

public class LiSi: Data
{
   
    public LiSi ()
    {
        name = "李四";
        age = 20;
        gender = "男";
        
    }
    //public override void Show()
    //{
    //    Debug.Log("这是" + name + "的身份信息");
    //}
}

public class InputData: MonoBehaviour
{
    public LiSi liSi;
    public ZhangSan zhangSan;
    private void Start()
    {
        liSi = new LiSi();
        zhangSan = new ZhangSan();        
        zhangSan.Show();
        liSi.Show();
    }
}

运行后得到的结果是:

vitrual 函数定义在父类里面,override定义在子类里面,(注意函数名和参数要一样),在调用子类的函数时,如果没有override函数则运行父类的函数,如果有则运行子类的函数。

这个的作用很大,比如在设计敌人的时候,我们希望大部分敌人的一些函数相同,但是有些特殊的敌人需要修改,我们就可以进行这个函数的修改,提高了代码的可维护性。

重载

定义:任何关系里面都可以发生,只要函数名一致,参数不一致。

public class Data
{
    public string name;
    public int age;
    public string gender;
    
    public virtual void Show()
    {
        Debug.Log("这是某某某的身份信息");
    }
    public void Show(string name)
    {
        Debug.Log("名字是"+name);
    }
    public void Show(int age )
    {
        Debug.Log("年龄是"+age);
    }


}


public class InputData: MonoBehaviour
{
    public Data data;
    private void Start()
    {
        data = new Data();

        data.Show();
        data.Show("zhangsan");
        data.Show(20);
    }

这个就是重载,也就是在多个同名函数,但是参数不一致,这个可以发生。

结果:

运用的地方同样很多,这里就不赘述了。

this和base

this.变量名,和base.变量名,用法就是这样,大致讲解,this.变量名讲的是所在类的变量,base.变量名讲的是父类的变量,主要是为了区别如果子类和父类定义的变量名相等了,用于区别,这里就不附上代码演示了,自己尝试一下就理解了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值