什么是接⼝?如何定义接⼝?如何实现接⼝?
在JAVA编程语⾔中是⼀个抽象类型,是抽象⽅法的集合,接⼝通常以interface来声明。⼀个类通过继承接⼝的⽅式,从⽽来继承接⼝的抽象⽅法。
如⽤关键字interface,你可以从类的实现中抽象⼀个类的接⼝。也就是说,⽤interface,你可以指定⼀个类必须做什么,⽽不是规定它如何去做。
接⼝在语句构成上与类相似,但是它们缺少实例变量,⽽且它们定义的⽅法是不含⽅法体的。实际上,这意味着你可以定义不⽤假设它们怎样实现的接⼝。⼀旦接⼝被定义,任何类成员可以实现⼀个接⼝。⽽且,⼀个类可以实现多个接⼝。
要实现⼀个接⼝,接⼝定义的类必须创建完整的⼀套⽅法。然⽽,每个类都可以⾃由的决定它们⾃⼰实现的细节。通过提供interface关键字,Java允许你充分利⽤多态性的“⼀个接⼝,多个⽅法”。
接⼝是为⽀持运⾏时动态⽅法解决⽽设计的。通常,为使⼀个⽅法可以在类间调⽤,两个类都必须出现在编译时间⾥,以便Java编译器可以检查以确保⽅法特殊是兼容的。这个需求导致了⼀个静态的不可扩展的类环境。
在⼀个系统中不可避免会出现这类情况,函数在类层次中越堆越⾼以致该机制可以为越来越多的⼦类可
⽤。接⼝的设计避免了这个问题。它们把⽅法或⽅法系列的定义从类层次中分开。因为接⼝是在和类不同的层次中,与类层次⽆关的类实现相同的接⼝是可⾏的。这是实现接⼝的真正原因所在。
接⼝定义
接⼝定义很像类定义。下⾯是⼀个接⼝的通⽤形式:
access interface name {
return-type method-name1(parameter-list);
return-type method-name2(parameter-list);
type final-varname1 = value;
type final-varname2 = value;
// ...
return-type method-nameN(parameter-list);
type final-varnameN = value;
}
这⾥,access要么是public,要么就没有⽤修饰符。当没有访问修饰符时,则是默认访问范围,⽽接⼝是包中定义的惟⼀的可以⽤于其他成员的东西。
当它声明为public时,则接⼝可以被任何代码使⽤。name是接⼝名,它可以是任何合法的标识符。注意定义的⽅法没有⽅法体。它们以参数列表后⾯的分号作为结束。
它们本质上是抽象⽅法;在接⼝中指定的⽅法没有默认的实现。每个包含接⼝的类必需实现所有的⽅法。
接⼝声明中可以声明变量。它们⼀般是final 和static型的,意思是它们的值不能通过实现类⽽改变。它们还必须以常量值初始化。
如果接⼝本⾝定义成public ,所有⽅法和变量都是public的。
下⾯是⼀个接⼝定义的例⼦。它声明了⼀个简单的接⼝,该接⼝包含⼀个带单个整型参数的callback( )⽅法。
interface Callback {
void callback(int param);
}
实现接⼝
⼀旦接⼝被定义,⼀个或多个类可以实现该接⼝。为实现⼀个接⼝,在类定义中包括implements ⼦句,然后创建接⼝定义的⽅法。⼀个包括implements ⼦句的类的⼀般形式如下:
access class classname [extends superclass]
[implements interface [,]]{
// class-body
}
这⾥,access要么是public的,要么是没有修饰符的。如果⼀个类实现多个接⼝,这些接⼝被逗号分隔。如果⼀个类实现两个声明了同样⽅法的接⼝,那么相同的⽅法将被其中任⼀个接⼝客户使⽤。实现接⼝的⽅法必须声明成public。⽽且,实现⽅法的类型必须严格与接⼝定义中指定的类型相匹配。
下⾯是⼀个⼩的实现Callback接⼝的例⼦程序:
class Client implements Callback {
parameter是什么意思啊// Implement Callback's interface
public void callback(int p){
System.out.println("callback called with "+ p);
}
}
注意callback( )⽤public 访问修饰符声明。
注意:当实现⼀个接⼝⽅法时,它必须声明成public。
类在实现接⼝时定义它⾃⼰的附加的成员,既是允许的,也是常见的。例如,下⾯的Client版本实现了callback( )⽅法,并且增加了nonIfaceMeth( )⽅法。
class Client implements Callback {
// Implement Callback’s interface
public void callback(int p){
System.out.println(“callback called with “ + p);
}
void nonIfaceMeth(){
System.out.println(“Classes that implement interfaces “ +
“may also define other members, too.”);
}
}
开课吧⼩编:接⼝分享就结束了,下⼀篇分享通过接⼝引⽤实现接⼝,希望⼤家能够喜欢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。