Unity3d - 初学篇 Event Functions 的 继承 机制

我们知道Start() Update() 等之类的 事件函数 在Unity 主线程中是依次调用的。至于调用的顺序可以查手册。

由此继承机制也会发生一些改变。

测试一:

public class MyTest2 : MonoBehaviour
{

    void Start () {
        //EventDelegate.Add(tween.onFinished, Test, true);
        Debug.Log(" MyTest2 Start ");
    }

    void Update()
    {
        Debug.Log(" MyTest2 Update ");
    }
}
public class MyTest3 : MyTest2
{

    // Use this for initialization
    void Start()
    {
        Debug.Log(" MyTest3 Start ");
    }

    void Update()
    {
        Debug.Log(" MyTest3 Update ");
    }
}

运行:

测试二:

那么 如果把MyTest3 的Start Update 注释掉会怎样了。

public class MyTest2 : MonoBehaviour
{

    void Start () {
        //EventDelegate.Add(tween.onFinished, Test, true);
        Debug.Log(" MyTest2 Start ");
    }

    void Update()
    {
        Debug.Log(" MyTest2 Update ");
    }
}

public class MyTest3 : MyTest2
{

    // Use this for initialization
    //void Start()
    //{
    //    Debug.Log(" MyTest3 Start ");
    //}

    //void Update()
    //{
    //    Debug.Log(" MyTest3 Update ");
    //}
}

运行:

熟悉c# 的 都知道,不加有修饰符 默认是 private 的。看来 unity 对这类 函数 应该是 特殊 处理了。

测试三:

既然这样 我们再看看 别的继承特性。

public class MyTest2 : MonoBehaviour
{
    //virtual or abstract members cannot be private
    public virtual void Start () {
        //EventDelegate.Add(tween.onFinished, Test, true);
        Debug.Log(" MyTest2 Start ");
    }

    void Update()
    {
        Debug.Log(" MyTest2 Update ");
    }
}
public class MyTest3 : MyTest2
{

    // Use this for initialization
    public override void Start()
    {
        Debug.Log(" MyTest3 Start ");
    }

    void Update()
    {
        Debug.Log(" MyTest3 Update ");
    }
}

结果看来和测试一是一样的。也就是说先会找最终实例化的有没有,然后再找父类有没有。

时间: 2024-10-24 17:14:56

Unity3d - 初学篇 Event Functions 的 继承 机制的相关文章

JavaScript 原型与继承机制详解

引言 初识 JavaScript 对象的时候,我以为 JS 是没有继承这种说法的,虽说 JS 是一门面向对象语言,可是面向对象的一些特性在 JS 中并不存在(比如多态,不过严格来说也没有继承).这就困惑了我很长的时间,当我学习到 JS 原型的时候,我才发现了 JS 的新世界.本篇文章讲解了 JavaScript new 操作符与对象的关系.原型和对象关联(也就是俗称的继承)的原理,适合有一定基础的同学阅读. 一.JavaScript 的类与对象 许多书籍上都会说到如何在 JS 当中定义“类”,通

轻松学习JavaScript十三:JavaScript基于面向对象之继承(包含面向对象继承机制)

一面相对象继承机制 今天算是什么都没干,尽在了解面向对象三大特性之一的继承了,过去的学习的C++和C#都是正统的面向对象语 言,学习的时候也没有怎么深入了解过,只是简单的学习最基础的继承.下午在看继承机制的时候,看到一个很经典 的继承机制实例.这个实例使用UML很好的解释了继承机制. 说明继承机制最简单的方式是,利用一个经典的例子就是几何形状.实际上,几何形状只有两种,即椭圆形(是圆 形的)和多边形(具有一定数量的边).圆是椭圆的一种,它只有一个焦点.三角形.矩形和五边形都是多边形的一种, 具有

Execution Order of Event Functions, unity 3d 事件函数的执行顺序

学习unity3d,感觉事件顺序很重要.就翻译一下官方文档吧. Execution Order of Event Functions 事件函数的执行顺序 In Unity scripting, there are a number of event functions that get executed in a predetermined order as a script executes. This execution order is described below: Unity 脚本中

继承,虚继承机制

继承体系中的作用域: 1.在继承体系中基类和派生类都有独立的作用域. 2.子类和父类中有同名成员.子类成员将屏蔽父类对成员的直接访问.(在子类成员函数中,可以使用基类:基类成员访问)-隐藏-重定义 3.注意在实际中在继承体系里面最好不要定义同名的成员. 注意事项: (1)当基类构造函数不带参数时, 派生类不一定需要定义构造面数, 系统会自动的调用基类的无参构造函数; 然而当基类的构造函数那怕只带有一个参数, 它所有的派生类都必须定义构造函数, 甚至所定义的派生类构造函数的函数体可能为空, 它仅仅

javascript继承机制 & call apply使用说明

一.继承机制 1.对象冒充:构造函数使用 this 关键字给所有属性和方法赋值,可使 ClassA 构造函数成为 ClassB 的方法,然后调用它. function ClassZ() { this.newMethod = ClassX; this.newMethod(); delete this.newMethod; this.newMethod = ClassY; this.newMethod(); delete this.newMethod; } 这里存在一个弊端,如果存在两个类 Clas

Execution Order of Event Functions

In Unity scripting, there are a number of event functions that get executed in a predetermined order as a script executes. This execution order is described below: Editor Reset: Reset is called to initialize the script’s properties when it is first a

学习java随笔第八篇:封装、继承、多态

java和c#一样都是面向对象的语言. 面向对象的语言有三大特征:封装.继承.多态 封装 封装:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别. class Person2 { private String name; public void setName(String name) { this.name=name; } public String getName() { return name; } private String sex; public voi

java第四章编程题(初学篇)

代码: 1 /* 2 test.java 3 */ 4 package test; 5 public class test { 6 public static void main(String args[] ) 7 { 8 CPU ccp= new CPU(); 9 HardDisk hhd=new HardDisk(); 10 PC pc =new PC(); 11 ccp.setSpeed(2200); 12 hhd.setAmount(200); 13 pc.setCPU(ccp); 14

java学习之第五章编程题示例(初学篇)

1 /* 2 Animal.java 3 */ 4 package animal; 5 6 public abstract class Animal { 7 public abstract void cry(); 8 public abstract String getanimalName(); 9 } 1 //Dog.java 2 package animal; 3 4 public class Dog extends Animal 5 { 6 7 String aa="旺旺"; 8