Unity中的重载和重写

本文详细介绍了Unity中方法的重载和重写。重载通过不同的参数列表实现,允许同一函数名有不同的实现,例如`Eat`方法接受float和int类型参数。而重写则发生在继承关系中,要求函数名、参数列表和返回类型完全一致,如`SayHello`方法在子类中被重写。重载在编译时决定调用哪个方法,而重写在运行时根据对象类型确定。
摘要由CSDN通过智能技术生成

一、重载

重载:(两个必须一个可以)

  1. 参数名必须相同
  2. 参数列表必须不同
  3. 返回值类型可以不同

代码示例:

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

public class OverLoad : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.L))
        {
            Eat(3.2f);
        }

        if (Input.GetKeyDown(KeyCode.K))
        {
            Eat(3);
        }
    }

    public void Eat(int i)
    {
        Debug.Log("我是int类型的吃");
    }

    public int Eat(float i)
    {
        Debug.Log("我是Float类型的吃");
        return 0;
    }

    public virtual void SayHello(string name)
    {
        Debug.Log(name + "你好!");
    }

}

结果:
在这里插入图片描述

二、重写

重写:(三个必须)

  1. 函数名必须相同
  2. 参数列表必须相同
  3. 返回值类型必须相同

代码示例:
父类

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

public class OverLoad : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.J))
        {
            SayHello("小朱");
        }
    }

    public virtual void SayHello(string name)
    {
        Debug.Log(name + "你好,我是父类方法");
    }

}

子类继承父类

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

public class OverWirte : OverLoad
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.U))
        {
            SayHello("小朱");
        }
    }

    public override void SayHello(string name)
    {
        Debug.Log(name+"你好,我是重写方法");
    }

}

结果:
在这里插入图片描述

三、重载和重写的区别

  1. 多态、封装、继承的位置不同,重载在同一定义域中(如在同一类中),重写在子类中。
  2. 定义不同,重载两个必须一个可以,重写三个必须
  3. 调用方式不一样,重载相同对象可以调用不同参数,重写不同对象调用相同参数
  4. 多态时机不同,重载编译时多态,重写运行时多态。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值