概述
1.1概述
接口,是Java語言中一種引用類型飘千,是方法的集合,如果說類的內(nèi)部封裝了成員變量栈雳、構(gòu)造方法和成員方法护奈,那么接口的內(nèi)部主要就是封裝了方法,包含抽象方法(JDK7及以前)哥纫,默認(rèn)方法和靜態(tài)方法(JDK8)霉旗,私有方法(JDK9)。
接口的定義蛀骇,它與定義類方式相似厌秒,但是使用interface關(guān)鍵字。它也會被編譯成.class文件擅憔,但一定要明確它并不是類简僧,而是另外一種引用數(shù)據(jù)類型。
引用數(shù)據(jù)類型:數(shù)組雕欺,類,接口棉姐。
接口的使用屠列,它不能創(chuàng)建對象,但是可以被實(shí)現(xiàn)(implements伞矩,類似于被繼承)笛洛。一個(gè)實(shí)現(xiàn)接口的類(可以看做是接口的子類),需要實(shí)現(xiàn)接口中所有的抽象方法乃坤,創(chuàng)建該類對象苛让,就可以調(diào)用方法了,否則它必須是一個(gè)抽象類湿诊。
1.2定義格式
public interface 接口名稱 {
//抽象方法
//默認(rèn)方法
//靜態(tài)方法
//私有方法
}
含有抽象方法
抽象方法:使用abstract關(guān)鍵字修飾狱杰,可以省略,沒有方法體厅须。該方法供子類實(shí)現(xiàn)使用仿畸。
代碼如下:
public interface InterFaceName{
public abstract void method();
}
含有默認(rèn)方法和靜態(tài)方法
默認(rèn)方法:使用default修飾,不可省略,供子類調(diào)用或者子類重寫错沽。
靜態(tài)方法:使用static修飾簿晓,供接口直接調(diào)用。
代碼如下:
public interface InterFaceName{
public default void method(){
//執(zhí)行語句
}
public static void method2(){
//執(zhí)行語句
}
}
含有私有方法和私有靜態(tài)方法
私有方法:使用private修飾千埃,供接口中的默認(rèn)方法或者靜態(tài)方法調(diào)用憔儿。代碼如下:
public interface InterFaceName{
private void method(){
//執(zhí)行語句
}
}
1.3基本的實(shí)現(xiàn)
實(shí)現(xiàn)的概述
類與接口的關(guān)系為實(shí)現(xiàn)關(guān)系,即類實(shí)現(xiàn)接口放可,該類可以稱為接口的實(shí)現(xiàn)類谒臼,也可以稱為接口的子類。實(shí)現(xiàn)的動作類似繼承吴侦,格式相仿屋休,只是關(guān)鍵字不同,實(shí)現(xiàn)使用implements關(guān)鍵字备韧。
非抽象子類實(shí)現(xiàn)接口:
- 必須重寫接口中所有抽象方法劫樟。
- 繼承了接口的默認(rèn)方法,即可以直接調(diào)用织堂,也可以重寫叠艳。
實(shí)現(xiàn)格式:
class 類名 implements 接口名{
//重寫接口中抽象方法【必須】
//重寫接口中默認(rèn)方法【可選】
}
抽象方法的使用
必須全部實(shí)現(xiàn),代碼如下:
定義接口:
public interface LiveAble{
//定義抽象方法
public abstract void eat();
public abstract void sleep();
}
定義實(shí)現(xiàn)類:
public class Animal implements LiveAble{
@Override
public void eat(){
System.out.println("吃東西");
}
@Override
public void sleep(){
System.out.println("晚上睡");
}
}
定義測試類:
public class Interface Demo{
public static void main(String[]args){
//創(chuàng)建子類對象
Animal a = new Animal();
//調(diào)用實(shí)現(xiàn)后的方法
a.eat();
a.sleep();
}
}//輸出結(jié)果:吃東西 晚上睡
下面我就不演示了易阳,值得注意的是
"默認(rèn)方法 "使用可以繼承附较,可以從寫,只能二者選其一潦俺。
1.4接口的多實(shí)現(xiàn)
對于接口而言拒课,一個(gè)類是可以實(shí)現(xiàn)多個(gè)接口的,這叫做接口的多實(shí)現(xiàn)事示。并且早像,一個(gè)類能繼承一個(gè)父類,同時(shí)實(shí)現(xiàn)多個(gè)接口肖爵。
實(shí)現(xiàn)格式:
class 類名 [extends 父類名] implements 接口名1,接口名2,接口名3...{
//重寫接口中
}
"靜態(tài)方法"的使用靜態(tài)與.class文件相關(guān)卢鹦,只能使用接口名調(diào)用,不可以通過實(shí)現(xiàn)類的類名或者實(shí)現(xiàn)類的對象調(diào)用劝堪。
"私有方法"的使用,私有方法:只有默認(rèn)方法可以調(diào)用冀自。私有靜態(tài)方法:默認(rèn)方法和靜態(tài)方法可以調(diào)用。
抽象方法【必須】
//重寫接口中默認(rèn)方法【不重名時(shí)可選】
}
[]:表示可選操作秒啦。
抽象方法接口中熬粗,有多個(gè)抽象方法時(shí),實(shí)現(xiàn)類必須重寫所有抽象方法帝蒿。如果抽象方法有重名的荐糜,只需要重寫一次。代碼如下:
定義多個(gè)接口:
interfaceA{
public abstract void showA();
publicabstractvoidshow();
}
interfaceB{
public abstract void showB();
public abstract void show();
}
定義實(shí)現(xiàn)類:
public class C implementsA,B{
@Override
public void showA(){
System.out.println("showA");
}
@Override
public void showB(){
System.out.println("showB");
}
@Override
public void show(){
System.out.println("show");
}
}