Java超詳細(xì)講解接口的實(shí)現(xiàn)與用法
1.接口的定義
接口是一種特殊的抽象類,是Java提供的一個(gè)重要的功能,與抽象類不同的是:
- 接口的所有數(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)建出來一個(gè)新的類,然后用新的類來實(shí)例化對象。
- 利用接口創(chuàng)建新的類的過程稱為接口的實(shí)現(xiàn)。
- 實(shí)現(xiàn)一個(gè)接口的過程使用implements關(guān)鍵字。
class 類名稱 implements 接口名表
{
...
}

- 如果實(shí)現(xiàn)某接口的類不是抽象類,那么它必須實(shí)現(xiàn)指定接口的所有抽象方法。
- 類在實(shí)現(xiàn)接口的方法時(shí)必須顯式的使用pulic訪問權(quán)限修飾符,子類覆蓋父類方法時(shí)不可以縮小父類方法的訪問權(quán)限范圍。
---------------??分割線??---------------
3.接口的引用
接口可以作為一種引用類型來使用,任何實(shí)現(xiàn)該接口的類實(shí)例化的對象都可以儲(chǔ)存在該接口類型的變量中,通過這些變量訪問類所實(shí)現(xiàn)的接口中的方法。

---------------??分割線??---------------
4.接口的繼承
當(dāng)然啦!接口和類一樣也可以使用繼承派生出來新的類。也可以通過extends關(guān)鍵字來實(shí)現(xiàn),被繼承的接口稱為父接口,派生出來的新接口稱為子接口。但是不同的是,一個(gè)子接口可以同時(shí)有多個(gè)直接父接口。它們之間用逗號分隔。子接口繼承父接口的所有變量和方法。
如果子接口中定義了和父接口同名的常量,父接口中的常量被隱藏,如果時(shí)方法,則被覆蓋。
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ī)制,同時(shí)規(guī)避了C++多重繼承中存在很多歧義的問題,使代碼更加簡潔,邏輯清晰,安全可靠。一個(gè)類只能有一個(gè)直接父類,但是它可以同時(shí)實(shí)現(xiàn)多個(gè)接口,可以把接口理解為類,即實(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-07
java打包成jar并執(zhí)行jar包中指定的main方法
這篇文章主要介紹了如何將java打包成可執(zhí)行的jar,并執(zhí)行jar包中指定的main方法的相關(guān)資料,文中給出了詳細(xì)的示例代碼,對大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。2017-03-03
Java 8 Stream Api 中的 map和 flatMap 操作方法
Java 8提供了非常好用的 Stream API ,可以很方便的操作集合。今天通過這篇文章給大家分享Java 8 Stream Api 中的 map和 flatMap 操作方法,需要的朋友可以參考下2019-11-11
SpringBoot使用SSE進(jìn)行實(shí)時(shí)通知前端的實(shí)現(xiàn)代碼
這篇文章主要介紹了SpringBoot使用SSE進(jìn)行實(shí)時(shí)通知前端,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能
今天小編教大家如何通過ssm框架+PageHelper插件實(shí)現(xiàn)分頁查詢功能,首先大家需要新建一個(gè)maven工程引入jar包,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-06-06
詳解springMVC之與json數(shù)據(jù)交互方法
本篇文章主要介紹了詳解springMVC之與json數(shù)據(jù)交互方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05

