一、接口定義
Java接口(Interface),是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。
接口定義的一般形式為:
[訪問控制符]interface <接口名> {
類型標識符final 符號常量名n = 常數;
返回值類型 方法名([參數列表]);
…
}
二、接口的特點
1、Java接口中的成員變量默認都是public,static,final類型的(都可省略),必須被顯示初始化,即接口中的成員變量為常量(大寫,單詞之間用"_"分隔)
2、Java接口中的方法默認都是public,abstract類型的(都可省略),沒有方法體,不能被實例化
3、Java接口中只能包含public,static,final類型的成員變量和public,abstract類型的成員方法
4、接口中沒有構造方法,不能被實例化
5、一個接口不能實現(implements)另一個接口,但它可以繼承多個其它的接口
6、Java接口必須通過類來實現它的抽象方法
7、當類實現了某個Java接口時,它必須實現接口中的所有抽象方法,否則這個類必須聲明為抽象類
8、不允許創建接口的實例(實例化),但允許定義接口類型的引用變量,該引用變量引用實現了這個接口的類的實例
9、 一個類只能繼承一個直接的父類,但可以實現多個接口,間接的實現了多繼承.
三、接口最簡單的實現方法
package com.frewen.interfacedemo; interface SwimInterface{ void swim(); } class Fish{ int fins=4; } class Duck { int leg=2; void egg(){}; } class Goldfish extends Fish implements SwimInterface { @Override public void swim() { System.out.println("Goldfish can swim "); } } class SmallDuck extends Duck implements SwimInterface { public void egg(){ System.out.println("SmallDuck can lay eggs "); } @Override public void swim() { System.out.println("SmallDuck can swim "); } } public class InterfaceDemo { public static void main(String[] args) { Goldfish goldfish=new Goldfish(); goldfish.swim(); SmallDuck smallDuck= new SmallDuck(); smallDuck.swim(); smallDuck.egg(); } }
接口的最主要的作用是達到統一訪問,就是在創建對象的時候用接口創建,【接口名】 【對象名】=new 【實現接口的類】,這樣你像用哪個類的對象就可以new哪個對象了,不需要改原來的代碼。
假如我們兩個類中都有個function()的方法,如果我用接口,那樣我new a();就是用a的方法,new b()就是用b的方法
這個就叫統一訪問,因為你實現這個接口的類的方法名相同,但是實現內容不同
我用接口來定義對象不就可以做到統一訪問了嗎?接口主要針對多個類實現它來說的,要是只有一個類當然可以不用接口了.你這樣想,我做一個USB接口,有個read()抽象方法,然后mp3類實現,U盤類實現,移動硬盤類實現,這樣我用的時候用USB a=new 【類名】;這樣a.read();要是我類名里寫U盤,就讀U盤,寫mp3就讀mp3,而這個名字可以從屬性文件里讀,你寫哪個就用哪個了
在類的繼承中,只能做單重繼承,而實現接口時,一次則可以實現多個接口,每個接口間使用逗號“,”分隔。
這時就可能出現常量或方法名沖突的情況,解決該問題時,如果常量沖突,則需要明確指定常量的接口,這可以通過“接口名.常量”實現。如果出現方法沖突時,則只要實現一個方法就可以了。下面通過一個具體的實例詳細介紹以上問題的解決方法。