1.概念:一種特殊的類,有全局常量和公共方法組成
定義接口用interface關鍵字
2.語法: //中括號“[ ]”的含義:你可繼承父接口,也可不繼承,是可選的
[修飾符] (abstract) interface 接口名[extends 父接口1,父接口2...] //接口可繼承多個父接口(即:接口是多繼承的);abstract若沒寫,系統會自動加上
{
0個到多個常量定義...
0個到多個抽象方法的定義...
}
接口就是用來被繼承,被實現的,修飾符一般建議用public
注意:不能使用private和protected修飾接口
3.接口定義:
常量:接口中的屬性是常量,即使定義時不添加public static final修飾符,系統也會自動加上。
方法:接口的方法只能是抽象方法,總是使用,即使定義時不添加public abstract修飾符,系統也會自動加上。
4.一個類可以實現一個或多個接口,實現接口使用implement關鍵字,Java中一個類能繼承一個父類,是不夠靈活的,可通過實現多個接口來補充
繼承父類實現接口的語法為:
[修飾符] class 類名 extends 父類 implement 接口1,接口2...
{
類體部份 //如果繼承了抽象類,需要實現繼承的抽象方法;如果遵守了一個接口,就要實現接口中的抽象方法
}
如果要繼承父類,繼承父類必須在實現接口之前
例:
abstract class Telphone{ //此父類只是用來約束子類,所以可以定義成抽象類
public abstract void call(); //在抽象類里若想要約束子類,就可定義為抽象方法 抽象方法沒有方法體以分號結束
public abstract void message();
}
class Cellphone extends Telphone{
public void call(){ //實現抽象類里要求的方法call
System.out.println("通過鍵盤來打電話");
}
public void message(){ //實現抽象類里要求的方法message
System.out.println("通過鍵盤來發短信");
}
}
class Smartphone extends Telphone{
public void call(){
System.out.println("通過語音來打電話");
}
public void message(){
System.out.println("通過語音來發短信");
}
}
class Ex17{
public static void main(String[] args){
Telphone tel1=new Cellphone(); //抽象類的父類引用指向一個子類對象,先創建一個普通的電話的對象
tel1.call(); //通過引用就可以打電話
tel1.message(); //通過引用就可以發短信
Telphone tel2=new Smartphone(); //通過父類的引用指向智能手機的對象
tel2.call();
tel2.message();
}
}
interface IplayGame{
public void PlayGame();
}
abstract class Telphone{ //此父類只是用來約束子類,所以可以定義成抽象類
public abstract void call(); //在抽象類里若想要約束子類,就可定義為抽象方法 抽象方法沒有方法體以分號結束
public abstract void message();
}
class Cellphone extends Telphone implements IplayGame{
public void call(){ //實現抽象類里要求的方法call
System.out.println("通過鍵盤來打電話");
}
public void message(){ //實現抽象類里要求的方法message
System.out.println("通過鍵盤來發短信");
}
}
class Smartphone extends Telphone{
public void call(){
System.out.println("通過語音來打電話");
}
public void message(){
System.out.println("通過語音來發短信");
}
public void PlayGame(){
System.out.println("具有玩游戲的功能");
}
}
class psp implements IplayGame{ //不能繼承phone抽象類,但psp有游戲的特性,所以要遵守IplayGame接口
public void PlayGame(){
System.out.println("具有玩游戲的功能");
}
}
class Ex17{
public static void main(String[] args){
Telphone tel1=new Cellphone(); //抽象類的父類引用指向一個子類對象,先創建一個普通的電話的對象
tel1.call(); //通過引用就可以打電話
tel1.message(); //通過引用就可以發短信實現了接口的對象
Telphone tel2=new Smartphone(); //通過父類的引用指向智能手機的對象
tel2.call();
tel2.message();
IplayGame ip1=new Smartphone(); //ip1接口引用指向一個實現了接口的對象
ip1.PlayGame();
IplayGame ip2=new psp();
ip2.PlayGame();
IplayGame ip3=new IplayGame();{ //new一個接口的代碼 輸出:通過鍵盤來打電話 或者:new IplayGame(){
public void PlayGame(){ 通過鍵盤來發短信 public void PlayGame(){
System.out.println("使用匿名內部類的方式實現接口"); 通過語音來打電話 System.out.println("使用匿名內部類的方式實現接口");
} 通過語音來發短信 }
}; 具有玩游戲的功能 }
ip3.PlayGame(); 具有玩游戲的功能
} 使用匿名內部類的方式實現接口
}
使用接口:
接口在使用過程中,還經常與匿名內部類配合使用
匿名內部類:沒有名字的內部類,多用於關注實現而不關注實現類的名稱
例://直接new一個接口,直接在接口里實現這個代碼
interfacce i=new interface(){
public void method(){
System.out.println("匿名內部類實現接口的方式");
}
};