Java接口也有坑?不容忽視!

目錄

1、什麼是接口?

2、如何定義接口?

3、接口如何實現?

4、接口的多重繼承


Hello!大家好哇,我是努力賺錢買生髮水的灰小猿!

前段時間和大家分享了在C#和Java中抽象類的實現,主要是對抽象類在C#和Java中的實現進行了簡單的對比。感興趣的小夥伴可以移步至我的這篇博客“抽象類到底抽不抽象?實例對比一看便知!

今天呢大灰狼就來和大家聊一聊在Java中抽象類的一個進階——接口,隨便對接口的知識鞏固複習一下,其實在真正做開發的時候呢,接口的使用是要比抽象類廣泛些的。

 

1、什麼是接口?

在Java中,接口其實是抽象類的延伸,它可以看做是純粹的抽象類,在接口中所有的方法都沒有方法體,它只是將某一個方法封裝到這個接口之中,當某個類需要使用這個方法的時候,讓這個類實現這個接口即可!這就是接口存在的必要性,野結衣說接口和抽象類的功能相似,都是對某一類事物的一個約束。

 

2、如何定義接口?

在Java中接口使用interface關鍵字定義,其語法爲:

public interface name

{

//定義接口中的方法

public void name();

}

  • Public:接口可以像類一樣被權限修飾符修飾,但public僅用於接口在與其同名的文件中被定義
  • Interface:接口定義的關鍵字
  • Name:接口的名稱

 

在這裏需要注意的是:在接口中,方法必須被定義爲public或abstract形式,其他權限修飾不可以被編譯器所認可,所以在接口中的方法,1即使不將方法聲明爲public類型,他也是public類型。

同時,在接口中定義的任何字段都自動是static和final的。

 

3、接口如何實現?

在Java中一個類實現一個接口可以使用implements關鍵字

代碼如下例:

Class 類名 implements 接口名
{
//其中實現接口中所定義的方法
}

如下面我們創建Exeicise_inplements類,在類中創建兩個繼承該類的內部類SquareInterface和ParallelogramInterface,再創建drawText接口,並使得前兩個內部類實現該接口,然後在主方法中分別調用這兩個內部類中的draw()方法。

package implements_one;

//定義接口
interface drawTest
{

//定義接口中的方法
public void draw();
}


//定義主類
public class Exeicise_inplements {
public void doAny() {
}

public static void main(String[] args) {
// TODO Auto-generated method stub

//將平行四邊形類對象和正方形類對象向上轉型爲drawTest接口的形式
//利用數組新建對象來接收兩個類
drawTest[] d = {new ParallelogramInterface(),new SquareInterface()};
for (int i = 0; i < d.length; i++) {
d[i].draw(); //調用draw方法
}
}
}

//定義平行四邊形類  繼承主類  並實現drawText接口
class ParallelogramInterface extends Exeicise_inplements implements drawTest
{

//實現接口方法
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("打印平行四邊形");
}

//重寫父類方法
public void doAny() {
}
}

//定義正方形類,繼承父類   實現drawText接口
class SquareInterface extends Exeicise_inplements implements drawTest
{

//實現接口方法
@Override
public void draw() {
System.out.println("打印正方形");
}


//重寫父類方法
public void doAny() {

}
}

運行Exeicise_inplements類,結果如下:

在這個實例中,正方形類和平行四邊形類實現了drawText接口中的draw方法,並且繼承了Exeicise_inplements類,同時在Exeicise_inplements類中調用draw方法時,首先將平行四邊形類對象和正方形類對象向上轉型爲drawTest接口形式,

這裏或許會有小夥伴有疑問,接口是否可以向上轉型?其實在Java中,無論是將一個類向上轉型類父類對象,還是向上轉型爲抽象父類對象,或者向上轉型爲該類實現接口,其實都是沒有問題的,

所以在這裏可以使用d[i]數組中的每一個對象調用draw()方法,由於對平行四邊形類和正方形類實現了向上轉型,所以在d[i]數組中的每一個對象分別代表平行四邊形類對象和正方形類對象,因此結果纔會輸出正方形類和平行四邊形類中的draw()方法。

 

4、接口的多重繼承

我們知道在Java的類中不允許出現多重繼承,但在使用接口的時候就可以的實現接口的多重繼承,一個類可以實現多個接口,因此可以將所有需要繼承的接口放置在implements關鍵字的後面,並且使用逗號分隔開,但是這就需要實現所繼承的接口中的所有方法。

多重繼承的語法如下:

Class 類名 implements 接口1,接口2,接口3,......

同時在定義一個接口時,也可以讓一個接口繼承另一個接口,如下:

Interface 接口1
{
}

Interface 接口2 extends 接口1
{
}

這樣,在接口2中就可以實現接口1的方法。

覺得不錯記得點贊關注喲!

同時你也可以關注我的微型公衆號“灰狼洞主”後臺回覆“Java資料”獲取Java視頻精講、Java程序員面試寶典、軟件框架實戰和項目案例剖析等資料分享!

大灰狼期待與你一同進步!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章