接口的宣告
编辑
下列的语法为接口的宣告方式:
[存取修飾] interface 介面名稱 [extends 其他的介面] {
常數宣告
抽象方法宣告
}
接口的主体包含着抽象方法,但所有方法在接口内(定义上)都是抽象(Abstract)方法,所以abstract的关键字在接口内则不被需要。由于接口代表着一个对外行为的集合,所以任何方法在接口内都是public(公开的)。
所以,一个简单的接口可以这么写
public interface Predator {
boolean chasePrey(Prey p);
void eatPrey(Prey p);
}
接口内的成员皆为静态(static)、final及公开(public),反之,他们可以成为任何类或接口的类型[1]
实现一个接口的语法,可以使用这个公式:
... implements 介面名稱[, 其他介面, 其他的..., ...] ...
类可以用来实现接口,举例来说
public class Lion implements Predator {
public boolean chasePrey(Prey p) {
// programming to chase prey p (specifically for a lion)
}
public void eatPrey (Prey p) {
// programming to eat prey p (specifically for a lion)
}
}
如果一个类实现了一个接口,而没有实现接口的所有方法,则它必须被标注为abstract(抽象类)。一个抽象类的子类必须实现它未完成的方法,假如该项子类仍不会实现接口的所有方法,那么该项子类依然需要被标注为abstract。
类可以同时实现多项接口
public class Frog implements Predator, Prey { ... }
接口通常被使用在Java编程语言,用来做回调函数使用[2]。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,把这个接口当成方法的参数,以此来使用该项对象的方法签名。
子接口
编辑
接口可以被延伸为数个不同的接口,可以使用上述所描述的方法,举例来说:
public interface VenomousPredator extends Predator, Venomous {
//介面主體
}
以上的程序片段是合法定义的子接口,与类不同的是,接口允许多重继承,而Predator 及 Venomous 可能定义或是继承相同的方法,比如说kill(Prey prey),当一个类实现VenomousPredator的时候,它将同时实现这两种方法。