文章目錄
一、接口的含義
java中接口有兩種含義:
(1)類的所有能被其他程序訪問的方法構成類的接口
(2)interface定義的接口類型
二、接口的聲明
接口類型和抽象類類似,都不能被實例化,接口內的方法默認爲抽象方法,沒有方法體
public interface xxx{
public void work();//默認爲抽象方法
}
用implements來訪問接口,類中需要爲接口中所有的抽象方法編寫方法體,否則該類是抽象類
public class x implements xxx{
public void work(){
//...
}
}
三、接口要點
1、接口中的變量
接口中所有變量都是public static final的,所有變量都必須被顯式初始化
public interface xxx{
int a1;//編譯出錯,必須顯式初始化
protected a2=0;//編譯出錯,a2必須是public static final類型
int a3=1;//編譯成功
}
2、接口中的默認方法和靜態方法
允許在接口中用default定義默認方法,static定義靜態方法,有方法體
public interface xxx{
default void method1(){//聲明默認方法
System.out.println("default method1");
}
static void method2(){//聲明靜態方法
System.out.println("static method2");
}
void method3();//聲明抽象方法
}
外部實例化調用默認方法和抽象方法,直接通過接口調用靜態方法
public class x implements xxx{
public void method3(){//編寫xxx中method3抽象方法的方法體
//...
}
public static void main(String[] args){
x a=new x();
x.method2();//直接調用靜態方法
a.method1();//通過實例調用默認方法
a.method3();//通過實例調用抽象方法
}
}
3、接口中的方法
接口中的方法默認都是public類型的,並且必須是public類型的
4、接口的繼承
接口也可以繼承別的接口
interface base{
void method1();
}
interface sub extends base{//sub接口將繼承base中的method1方法
void method2();
}
5、多接口
一個類可以實現多個接口,但是隻能繼承一個抽象類
public class x implements a,b,c{
//...
}
6、引用變量
允許將一個引用變量聲明爲接口類型,而實際上引用實現接口的類的實例
7、類的實現
類在實現接口的抽象方法時,必須用顯式地使用public修飾符,因爲接口的抽象方法的訪問限制默認爲public,不顯式將被認爲是縮小了接口中定義的方法的訪問權限。
三、instanceof
判斷一個引用類型所引用的對象是否是一個類的實例,這裏的類可以是父類也可以是接口
引用變量 instanceof 類名或者接口名
類名或接口名是以下三者時表達式返回true
(1)引用變量的類
(2)引用變量類的直接或間接父類
(3)引用變量類實現的接口
四、‘==’和equals()方法
a==b;
a.equals(b);
只有當a和b所指向的是同一個實例時這兩個表達式才返回true
JDK中有些類覆蓋了object的equals方法,如String,會判斷內容相不相同而不是所指代的實例相不相同