引用wikipedia里面对Java语言接口的说明。
接口(英语:Interface),在JAVA编程语言中是一个抽象类型(Abstract Type),它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用相同的界面进行沟通。接口通常以interface来声明,它仅能包含方法签名(Method Signature)以及常数声明(变量声明包含了 static 及 final),一个接口不会包含方法的实现(仅有定义)。
通俗来讲,接口是一组公共方法和常量的集合(Java),这些方法有相同的函数签名,但是内容却不相同。在面向对象语言中,有时我们不关心一个对象究竟是哪个类的,而关心一个对象到底实现了什么功能。这种情况下就要用到接口。
这句话引用自我的C#老师,接口确实是一种约定,它约定了对象应该有的行为。一旦一个类继承了某个接口,就必须把接口当中的约定实现出来。
接口对于程序的开发和维护都是有很大好处的。
在Ruby中,你可以在module里面找到接口的影子。module里面可以定义一些模块方法和普通方法。一旦一个模块被糅合到类中,这个类就“继承”了模块的方法。
定义成def self.xxx的模块方法,使用的时候就可以用 模块名.xxx 调用。
定义成def xxx的普通方法,需要再糅合了模块的类中进行调用。
例:
class A : IComparable { public int X{get;set;} public int CompareTo(object obj) { A a = (A)obj; if( this.X > a.X) return 1; if( this.X == a.X) return 0; if( this.X < a.X) return -1; } }
class A : IComparable
{
public int X{get;set;}
public int CompareTo(object obj)
{
A a = (A)obj;
if( this.X > a.X) return 1;
if( this.X == a.X) return 0;
if( this.X < a.X) return -1;
}
}
简单写了个C#的接口范例不知道有没有错误。
定义成这样是因为C#里List#Sort方法服务的,该方法需要对象实现了IComparable,即需要对象是“可比较的”。
在Ruby中,类似的,通过定义'<=>'方法,可以实现不同类对象默认的比较大小方法,应用于不带块的Array#sort方法。 |