Java超詳細(xì)講解接口的實(shí)現(xiàn)與用法
1.接口的定義
接口是一種特殊的抽象類,是Java提供的一個重要的功能,與抽象類不同的是:
- 接口的所有數(shù)據(jù)成員都是靜態(tài)的且必須初始化。
- 接口中的所有方法必須都是抽象方法,不能有一般的方法。
[public] interface 接口名稱 [extends 父接口名列表]
{
[public] [static] [final]數(shù)據(jù)類型 成員變量名 = 常量;
...
[public][abstract]返回值數(shù)據(jù)類型 方法名(參數(shù)表);
...
}
其中,成員方法必須都是抽象方法。接口定義的[ ]中的修飾符可以省略,省略后默認(rèn)為以上訪問權(quán)限。
---------------??分割線??---------------
2.接口的實(shí)現(xiàn)
接口和抽象類一樣不能用來實(shí)例化對象,必須借用接口的特征創(chuàng)建出來一個新的類,然后用新的類來實(shí)例化對象。
- 利用接口創(chuàng)建新的類的過程稱為接口的實(shí)現(xiàn)。
- 實(shí)現(xiàn)一個接口的過程使用implements關(guān)鍵字。
class 類名稱 implements 接口名表
{
...
}
- 如果實(shí)現(xiàn)某接口的類不是抽象類,那么它必須實(shí)現(xiàn)指定接口的所有抽象方法。
- 類在實(shí)現(xiàn)接口的方法時必須顯式的使用pulic訪問權(quán)限修飾符,子類覆蓋父類方法時不可以縮小父類方法的訪問權(quán)限范圍。
---------------??分割線??---------------
3.接口的引用
接口可以作為一種引用類型來使用,任何實(shí)現(xiàn)該接口的類實(shí)例化的對象都可以儲存在該接口類型的變量中,通過這些變量訪問類所實(shí)現(xiàn)的接口中的方法。
---------------??分割線??---------------
4.接口的繼承
當(dāng)然啦!接口和類一樣也可以使用繼承派生出來新的類。也可以通過extends關(guān)鍵字來實(shí)現(xiàn),被繼承的接口稱為父接口,派生出來的新接口稱為子接口。但是不同的是,一個子接口可以同時有多個直接父接口。它們之間用逗號分隔。子接口繼承父接口的所有變量和方法。
如果子接口中定義了和父接口同名的常量,父接口中的常量被隱藏,如果時方法,則被覆蓋。
interface A{ abstract void print1(); } interface B extends A{ abstract void print2(); } class C implements B{ public void print1(){ System.out.print("Hello"); } public void print2(){ System.out.print("World"); } } public class Print{ public static void main(String[] args){ B b=new C(); b.print1(); b.print2(); } }
其中B接口是A接口的直接父接口,C類實(shí)現(xiàn)B接口,覆蓋B接口中的所有的抽象方法。Print類是主類,定義接口的引用指向?qū)崿F(xiàn)它的類的實(shí)例化對象,訪問類所實(shí)現(xiàn)的接口中的方法。(接口作為引用數(shù)據(jù)類型使用)
---------------??分割線??---------------
5.利用接口實(shí)現(xiàn)多重繼承
由于Java不支持多重繼承,所以可以利用接口實(shí)現(xiàn)類似于多重繼承的機(jī)制,同時規(guī)避了C++多重繼承中存在很多歧義的問題,使代碼更加簡潔,邏輯清晰,安全可靠。一個類只能有一個直接父類,但是它可以同時實(shí)現(xiàn)多個接口,可以把接口理解為類,即實(shí)現(xiàn)了Java類的多重繼承。
//filename:Cylinder.java interface Face1{ final double PI=3.14; abstract double area(); } interface Face2{ abstract void volume(); } public class Cylinder implements Face1,Face2{ private double radius; private int height; public Cylinder(double r,int h){ radius=r; height=h; } public double area(){ return PI*radius*radius; } public void volume(){ System.out.print("圓柱體的體積="+this.area()*height); } public static void main(String[] args){ Cylinder volu=new Cylinder(5.0,2); volu.volume(); } } //圓柱體的體積=157.0
到此這篇關(guān)于Java超詳細(xì)講解接口的實(shí)現(xiàn)與用法的文章就介紹到這了,更多相關(guān)Java接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot ActiveMQ如何設(shè)置訪問密碼
這篇文章主要介紹了Spring Boot ActiveMQ如何設(shè)置訪問密碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07java打包成jar并執(zhí)行jar包中指定的main方法
這篇文章主要介紹了如何將java打包成可執(zhí)行的jar,并執(zhí)行jar包中指定的main方法的相關(guān)資料,文中給出了詳細(xì)的示例代碼,對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03Java 8 Stream Api 中的 map和 flatMap 操作方法
Java 8提供了非常好用的 Stream API ,可以很方便的操作集合。今天通過這篇文章給大家分享Java 8 Stream Api 中的 map和 flatMap 操作方法,需要的朋友可以參考下2019-11-11SpringBoot使用SSE進(jìn)行實(shí)時通知前端的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot使用SSE進(jìn)行實(shí)時通知前端,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能
今天小編教大家如何通過ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能,首先大家需要新建一個maven工程引入jar包,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06詳解springMVC之與json數(shù)據(jù)交互方法
本篇文章主要介紹了詳解springMVC之與json數(shù)據(jù)交互方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05