unity中 继承,多态,override 的问题1

来源:互联网 发布:java object对象 编辑:程序博客网 时间:2024/05/18 03:45

在unity里面,如果派生类没有update方法,该派生类会

用其父类的update()方法。比如:

baseclass.cs


using UnityEngine;
using System.Collections;

public class baseclass : MonoBehaviour {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    void Update () {
        transform.Translate (transform.right*Time.deltaTime*1.0f);
    }
}


deriveclass.cs


using UnityEngine;
using System.Collections;

public class deriveclass : baseclass {

    // Use this for initialization
    void Start () {
    
    }
    
    // Update is called once per frame
    //void Update () {
    
    //}
}

把deriveclass.cs拖到一个gameobject将会移动。这说明update()在顶级基类中是abstract类型,这也是多态技术的应用之一。

我另外做了个实验验证,这是在monodevelop中的一个独立C#控制台程序,输出 C,也就是说会调用最后一个实现的f().


using System;
using System.Collections;
using System.Collections.Generic;
namespace curious
{
    abstract class A{
        public abstract void f();

    } 
    class B:A{
        public override void f(){
            Console.WriteLine ("B");
        }
    }
    class C:B{
        public override void f(){
            Console.WriteLine ("C");
        }
    }
    class D:C{
      
    }
        class MainClass
        {
                public static void Main (string[] args)
                {
            D d = new D ();
            d.f ();
                }
        }
}


由此也可猜测其他几个在顶级基类中也很可能是abstract方法。可自己实验,。

0 0