阅读 2

C#、Java接口

C#接口

成员定义

  • 接口内只可定义方法、属性、事件、索引器、不可以定义常量、字段、运算符、实例构造函数、析构函数或类型、不能包含静态成员。
  • 接口成员是自动公开的,且不能包含任何访问修饰符,否则会报错
interface IProgramA
{
    //属性
    string Name
    {
        get;set;
    }
    //方法
    void addFunc(int i, int j);
    //索引器
    int this[int i]
    {
        get;
    }
    //事件
    event AddFunc af;
}
复制代码

成员实现

  • 接口中的方法都是抽象方法,实现接口的任何非抽象类型都必须实现接口的所有成员:
  • 当显式实现该接口的成员时,实现的成员不能通过类实例访问,只能通过接口实例访问。
  • 当隐式实现该接口的成员时,实现的成员可以通过类实例访问,也可以通过接口实例访问,但是实现的成员必须是公有的。
  • 一个类可以实现多个接口
class Indexer : IProgramA, IProgramB//实现多个接口
{
    //实现属性,隐式实现
    public string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
    //实现方法,隐式实现
    public void addFunc(int i, int j)
    {
        Console.WriteLine("i+j=" + (i + j));
    }
    //实现索引器,隐式实现
    int[] array = { 2, 4, 53, 4, 5, 324 };
    public int this[int i]
    {
        get
        {
            if (i < array.Length)
            {
                return array[i];
            }
            return -1;
        }
    }
    //实现事件,隐式实现
    public event AddFunc af;
    //实现另一个接口中的方法,显式实现
    void IProgramB.funcB()
    {
        Console.WriteLine("显式实现的接口方法");
    }
    static void Main()
    {
        //类的实例方法接口方法
        Indexer id = new Indexer();
        id.af += id.addFunc;
        id.af(1, 2);

        //接口的实例方法接口方法
        IProgramA ia = new Indexer();
        ia.addFunc(23, 23);

        //funcB只可有IProgramB的实例调用
        IProgramB ib = new Indexer();
        ib.funcB();
    }
}
public delegate void AddFunc(int i, int j);
interface IProgramA
{
    //属性
    string Name
    {
        get;set;
    }
    //方法
    void addFunc(int i, int j);
    //索引器
    int this[int i]
    {
        get;
    }
    //事件
    event AddFunc af;
}
interface IProgramB
{
    void funcB();
}

复制代码

更多资料

C#接口和C#抽象类联合使用

Java接口

成员定义

  • 接口中的所有属性 默认的修饰符是 public static final。
  • 接口中的所有方法 默认的修饰符是 public abstract。

成员实现

  • 和C#的类似

为什么是List list = new ArrayList,而不直接用ArrayList?

主要考察面向对象的三大特征之一----多态。同时也说明设计模型非常重要。解释如下: 首先List有三个子类:ArrayList、LinkedList、Vector。当有如下声明时:

List list = new  ArrayList();
复制代码

此时的list是一个List对象,有些ArrayList有但是 List没有的属性和方法,它就不能再用了。但若是想要用LinkedList的实现来替代ArrayList的话,只需改动一行即可,其余代码基本不用管:

List   list   =   new   LinkedList();
复制代码

若声明:

ArrayList list=new  ArrayList();
复制代码

此时list是一个ArrayList对象,它可以使用所有ArrayList的方法和属性,但若是想要使用LinkedList的实现来替代ArrayList的话就比较费事了,因为代码中可能使用了ArrayList独有的属性和方法。

关注下面的标签,发现更多相似文章
评论