接口(英语:Interface),在Java编程语言中是一个抽象类型(英语:Abstract_type)(Abstract Type),它被用来要求类(Class)必须实现指定的方法,使不同类的对象可以利用相同的界面进行沟通。接口通常以interface
来宣告,它仅能包含方法签名(Method Signature)以及常量宣告(变量宣告包含了 static
及 final
),一个接口不会包含方法的实现(仅有定义)。
接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须宣告为抽象类(英语:Abstract_class)(Abstract Class)。另外,在Java中,接口类型可用来宣告一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。
其中一个使用接口的优势是,可以利用他们模拟多重继承,类在JAVA中不允许多重继承,所有在JAVA中的类必须而且仅能有一个父类,而java.lang.Object
(JAVA类型系统中最顶层的类型)是唯一一个例外。
JAVA的类可以被实现许多个接口,然而一个接口则无法实现其他的接口。
接口被用来统一类的共通行为,当不同的类需要进行信息共享时,是不需要特别去创建类间的关系。举例来说,一个人(Human)及一只鹦鹉(Parrot)都会吹口哨(whistle),然而Human
及Parrot
不应该为Whistler
的子类,最好的做法是令他们为Animal
的子类,而他们可以使用Whistler
的接口进行沟通。
还有一种接口的使用方法,则是当一个对象有实现特定接口时,我们使用它是不需要知道它的类,例如,一个事物因为口哨的噪音影响到其他人,对于其他人而言,就不需要知道噪音来源是来自人还是鹦鹉,因为他们可以确定,一个会吹口哨的事物正在吹口哨。举一个更实际的例子,排序算法可能会期待对象的类型是可以被比較
的,于是它只需要知道对象的类型可以被以某种方式进行排序即可,这与对象的类无关。whistler.whistle()
将会调用对象的实现方法whistle
,而不需要知道对象是以哪个类来实现Whistler
。
例如:
interface Bounceable { void setBounce(); // 注意分號 // 介面的方法(method)是公開(public)、抽象(abstract)、永遠不會是最尾端的型別(final) // 把它們想成只是個模型,所以沒有任何方法有被實現 }