目錄
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程序員面試寶典、軟件框架實戰和項目案例剖析等資料分享!
大灰狼期待與你一同進步!