在网上找到了很多关于overload、override、overwrite的文章,结果发现并没有overwrite这东西。
- C#中的重载(overload)、重写/覆盖(override)、隐藏,C++也差不多
参考:
https://blog.csdn.net/qq_40213457/article/details/80663651
https://blog.csdn.net/qq_39237792/article/details/88559500
函数签名:
一个函数由这么几部分组成,函数名、参数个数、参数类型、返回值,函数签名由参数个数与其类型组成。函数在重载时,利用函数签名的不同(即参数个数与类型的不同)来区别调用者到底调用的是那个方法!
函数签名由函数的名称和它的每一个形参(按从左到右的顺序)的类型和种类(值、引用或输出)组成。
而委托可以理解为以函数作为参数的函数。那么该委托就必须具备和函数相同的参数列表(包括参数的顺序都要相同)。
使用new关键字隐藏基类函数签名相同的函数
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ClassFather
{
public void fun0()
{
Debug.Log("father fun0");
}
public void fun1()
{
Debug.Log("father fun1");
}
virtual public void fun2()
{
Debug.Log("father fun2");
}
virtual public void fun3()
{
Debug.Log("father fun3");
}
virtual public void fun4()
{
Debug.Log("father fun4");
}
virtual public void fun5(string name)
{
Debug.Log("father fun5");
}
}
public class ClassSon : ClassFather
{
//默认隐藏
public void fun0()
{
Debug.Log("son fun0");
}
//隐藏
public new void fun1()
{
Debug.Log("son fun1");
}
//默认隐藏
public void fun2()
{
Debug.Log("son fun2");
}
//override,基类的被覆盖
override public void fun3()
{
Debug.Log("son fun3");
}
//隐藏
public new void fun4()
{
Debug.Log("son fun4 1");
}
//重载
public void fun4(int num)
{
Debug.Log("son fun4 2");
}
//重载
public void fun5(int num)
{
Debug.Log("son fun5");
}
}
ClassSon son = new ClassSon();
son.fun0();
son.fun1();
son.fun2();
son.fun3();
son.fun4();
son.fun4(10);
son.fun5(10);
son.fun5("hello");
Debug.Log("=================================");
ClassFather father = son;
father.fun0();
father.fun1();
father.fun2();
father.fun3();
father.fun4();
father.fun5("world");
输出log:
- Java中的override
参考:
https://www.cnblogs.com/larry2016/p/7640741.html
https://www.runoob.com/java/java-override-overload.html
C#重写后,可以用base调用基类被重写的方法。而java中重写后,使用 super 关键字可以在子类中调用父类的被重写方法