接口 interface

作用:降低各模块之间的耦合,为系统提供更好的可扩展性和可维护性。

特点:

1、接口只能继承接口,不能继承类。

2、接口是规范,不包含构造器和初始化定义。

3、接口中包含的方法只能是抽象方法。

4、接口中的内部类,枚举类,接口默认的使用public static 修饰。

5、接口中的Field用 public static final修饰。

6、接口中的方法用 public abstract修饰。

7、接口支持多继承。

8、接口不能用于创建实例,但接口可以用于声明引用类型变量。

9、类实现接口时,必须将接口里的抽象类全部实现。

--------------------------------------------------------------------------------------------

实例

首先要创建个接口文件

using UnityEngine;
using System.Collections;

public interface myInterFace
{
    //做一个统计动物信息的实例
    void objName();
    void objOld();
    void objClear();
}

然后定义一个manager来管理继承接口的类

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class myManager : MonoBehaviour{
    //定义一个列表用来存放接口文件
    public static List<myInterFace> _myList = new List<myInterFace>();
    //把继承接口的文件添加到列表里
    public static void Add(myInterFace content)
    {
        _myList.Add(content);
    }
    //静态函数 用来控制所有接口文件同时执行函数
    public static void objName()
    {
        foreach (myInterFace i in _myList)
        {
            i.objName();
        }

    }
    //静态函数 用来控制所有接口文件同时执行函数
    public static void objOld()
    {
        foreach (myInterFace i in _myList)
        {
            i.objOld();
        }
    }
    public static void objClear()
    {
        foreach (myInterFace i in _myList)
        {
            i.objClear();
        }
    }
    
}

创建基类

using UnityEngine;
using System.Collections;

public class DogBase : MonoBehaviour, myInterFace
{
    [SerializeField]
    protected string _name;
    [SerializeField]
    protected int _old;
    [SerializeField]
    private bool _isActive = true;
    void Start()
    {
        myManager.Add(this);
    }
    //----------------------接口事件---------------------------------
    public virtual void objName()
    {
        Debug.Log("Dog:My name is " + _name + ".");
    }
    public virtual void objOld()
    {
        Debug.Log("Dog:My Old is " + _old + ".");
    }
    public virtual void objClear()
    {
        Debug.Log("-----------------------objClear");
        if (_isActive)
        {
            _isActive = false;
        }
        else
        {
            _isActive = true;
            return;
        }
        _name = "";
        _old = 0;
    }
    //----------------------一般事件---------------------------------
    void OnMouseDown()
    {
        objName();
        objOld();
    }
}

创建派生类

using UnityEngine;
using System.Collections;

public class DogA : DogBase {

    // Use this for initialization
    public override void objName()
    {
        base.objName();
    }
    public override void objOld()
    {
        base.objOld();
    }
    public override void objClear()
    {
        _name = "";
        _old = 0;
    }
}

创建主逻辑

using UnityEngine;
using System.Collections;

public class myMain : MonoBehaviour {

    // Use this for initialization
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.S))
        {
            //实现让所有带有接口的对象同时执行此函数
            myManager.objClear();
        }
    }
}

 

posted @ 2013-12-18 12:00  古刹红罗  阅读(233)  评论(0)    收藏  举报