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();
}
更多资料
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独有的属性和方法。