1.接口的基本概念
- 抽象方法和常量值得集合。從本質(zhì)上講,接口是一種特殊的抽象類。
- 格式:
[public] interface 接口名 [extends superinterfaceList]
{
//定義常量和方法
}
2.接口的知識(shí)點(diǎn)
接口中的屬性成員必須是public static final 類型的,方法成員必須是public abstract類型的(抽象方法)。定義時(shí)可以部分省略或全部省略,默認(rèn)為上述的類型。
一個(gè)類不能繼承接口,只能實(shí)現(xiàn)接口(使用implements關(guān)鍵字)。類繼承類,接口繼承接口。
接口允許多繼承。
接口中定義的屬性成員的值不能在實(shí)現(xiàn)類中更改。(屬性成員為final類型不允許更改)
如果實(shí)現(xiàn)類只實(shí)現(xiàn)了接口的部分方法,則該類必須聲明為abstract類型。
interface A
{
public static final int i = 1;
public abstract void f();
int j = 2; //默認(rèn)為public static final類型
void g(); //默認(rèn)為public abstract類型
}
abstract class B implements A //如果不重寫(xiě)接口的所有抽象方法必須聲明為abstract類型
{
}
- 一個(gè)類可以繼承一個(gè)父類的同時(shí)實(shí)現(xiàn)多個(gè)接口,但extends須放在implements前面。
interface A
{
}
interface B
{
}
class C
{
}
class D extends C implements A, B
{
}
- 接口不能實(shí)例化,但能定義一個(gè)接口引用類型的變量,并將其指向?qū)崿F(xiàn)接口的對(duì)象,達(dá)到多態(tài)的目的。
interface A
{
void f();
}
class B implements A
{
public void f() //必須加public,f()是public類型,重寫(xiě)類型必須相同
{
System.out.println("嘿嘿");
}
void g()
{
System.out.println("哈哈");
}
}
class Test
{
public static void main(String[] args)
{
A a1;
//A a2 = new A(); //error 接口不能實(shí)例化
a1 = new B();
a1.f();
//a1.g(); //error 不能調(diào)用子類獨(dú)有的方法
}
}
3.接口的作用
- 通過(guò)接口可以實(shí)現(xiàn)不相關(guān)類的相同行為。
如:java規(guī)定所有可以完成自我復(fù)制功能的類都必須實(shí)現(xiàn)java.lang.Colneable接口,但該接口是空的,該接口沒(méi)有內(nèi)容,只是起個(gè)標(biāo)志作用。 - 接口提供了不同對(duì)象進(jìn)行協(xié)作的平臺(tái)。
如:事件處理。 - 接口可以實(shí)現(xiàn)多繼承,在一定程度上彌補(bǔ)了類只能單繼承的缺陷。
- 接口是我們了解一個(gè)類功能的重要途徑。
如:java整個(gè)容器框架就是以接口的方式建立起來(lái)的,實(shí)現(xiàn)不同接口的類完成的是不同的功能,接口是我們了解一個(gè)類的功能重要途徑。
4.接口與抽象類的區(qū)別
- 接口中的方法一定是抽象方法,抽象類中的方法可以不是抽象方法。
- 類不允許多繼承,接口允許多繼承。