Unity中C#语言使用父类声明,子类实例化后,函数的调用
前言
当用父类声明一个对象,但使用其子类去实例化,这个时候通过这个对象调用一个子类重写过的方法,程序会怎么进行呢?
提示:以下是本篇文章正文内容,下面案例可供参考
一、直接上代码
1.1 一共就两个脚本:SceneBase.cs,CubeOne.cs,其中后者继承自前者
using UnityEngine;
//场景基类
public class SceneBase : MonoBehaviour
{
/// <summary>
/// 初始化操作,例如进行一些层级设置之类的
/// </summary>
private void Init()
{
Debug.Log("------SceneBase Init------");
}
public virtual void OnOpen()
{
Debug.Log("----SceneBase OnOpen-----");
}
/// <summary>
/// 开启界面或激活物体
/// </summary>
/// <param name="panelName"></param>
/// <param name="param"></param>
public static void Open(Transform trans,object param=null, bool state = true)
{
Debug.Log("--------SceneBase Open--------");
trans.gameObject.SetActive(state);
SceneBase sceneBase = trans.GetComponent<SceneBase>();
sceneBase.Init();
sceneBase.OnOpen();
}
}
using UnityEngine;
public class CubeOne : SceneBase
{
private void Awake()
{
SceneBase.Open(transform);
}
public override void OnOpen()
{
Debug.Log("---------CubeOne OnOpen----------");
}
}
1.2 Unity控制台输出
1.3 解释
从输出中可以看到,当使用对象调用的方法在子类中重写过时,,父类中的会默认不调用,例如:OnOpen();而父类中Init()也可以通过父类声明、子类实例化的对象调用。