1. 程式人生 > 其它 >Java面向物件基礎(介面)

Java面向物件基礎(介面)

技術標籤:總結概述基礎java介面

什麼是介面

介面是多個類的公共規範,介面是一種引用資料型別,最重要的內容就是其中的抽象方法

介面是比抽象類更抽象的抽象類,規範了對子類的約束,全面專業的實現了規範和具體實現的分離

如何定義介面

public interface 介面名稱{ 介面內容 }

介面中的抽象方法如何定義

步驟:

1、新建一個java檔案,型別選做interface型別
2、在接口裡面寫抽象方法,在介面中的抽象方法,修飾符必須是固定的關鍵字:public abstract(這兩個關鍵字可以選擇性刪除掉)
在這裡插入圖片描述
使用步驟:

1、介面不能直接使用,必須有一個實現類來實現該介面
格式:

public class 實現類名稱 implements 介面名稱
2、介面的實現類必須覆蓋重寫(實現)介面中所有的抽象方法
格式:
重寫方法,去掉abstract關鍵字,加上方法體
3、建立實現類的物件,進行使用

介面中的預設方法如何定義

格式:

public default 返回值型別 方法名稱(引數列表){ 方法體 }

作用:

介面中預設方法的出現,目的是解決介面升級問題,當我們接口裡面寫好一個或幾個抽象方法後,實現類實現了該介面,功能正常實現了。當需要在介面中定義新的方法時,如果使用抽象方法,那麼實現介面類必須得全部重寫新的抽象方法,所以,我們為了減少程式碼的更改,可以使用預設方法

介面預設方法的使用

介面中的預設方法,預設被實現類繼承,實現類可直接呼叫。
在呼叫實現類的時候,如果實現類中沒有預設方法,會預設向上(介面中)查詢。
同時,介面的預設方法,也可以被實現類覆蓋重寫。

介面靜態方法的定義和使用

介面靜態方法的定義格式:

public static 返回值型別 方法名稱(引數列表){ 方法體}

呼叫的時候 介面名稱.靜態方法名();

注意:
不能通過介面實現類來呼叫介面中的靜態方法。因為一個實現類可實現多個介面,如果直接用實現類來呼叫靜態方法,後期可能會產生一定的衝突。

介面常量定義與使用

介面中也可以定義成員變數,但是必須使用public static final 三個關鍵字進行修飾,這就是介面中的“常量”

注意:

介面中的常量必須,也可以省略public static final
介面中的常量,必須進行賦值。
呼叫的時候,直接介面 名.變數名

繼承父類實現多個介面

1、介面中沒有靜態程式碼塊,也沒有構造方法
2、一個類的直接父類是唯一的,但是一個類同時可以實現多個介面,實現多個介面的時候,用逗號隔開。必須實現多個介面中的抽象方法。
格式:
public class 實現類 implements 介面1,介面2

3、如果實現類所實現的介面中出現方法重名的現象,只需重寫覆蓋一個方法即可。
4、如果實現類沒有實現所有介面的抽象方法,那麼該實現類就必須是抽象類
5、如果實現類所實現的多個介面中,存在相同的預設方法,那麼實現類一定要對衝突的預設方法覆蓋重寫
6、一個類直接父類的方法和其實現介面的方法衝突是,那麼父類優先。在java中,繼承優先於介面

介面的多繼承關係

1、類之間屬於單根繼承,只能有一個直接父類
2、類和介面之間,一個類可實現多個介面
3、介面與介面之間是多繼承的

格式:
public interface 介面1 entends 介面2,介面3{}

此時就是介面1繼承了介面2和介面3.
一個介面繼承多個介面時,如果抽象方法重複,沒有關係。如果預設方法重複,則子介面必須覆蓋重寫

介面練習

在這裡插入圖片描述

//CPU介面  方法獲得CPU型別
public interface Cpu {
    public abstract String getCpu();
}
//硬碟介面
public interface Hdd {
    public abstract  String getHdd();
}
//記憶體介面
public interface Ram {
    public abstract String getRam();
}
public class Factory implements Cpu,Hdd,Ram {
    @Override
    public String getCpu() {
        return "Inter I7";
    }
    @Override
    public String  getHdd() {
        return "金士頓 500G";
    }
    @Override
    public String getRam() {
        return "8G運存";
    }
}
public class Computer {
    //電腦具備屬性
    public String ram;
    public String hdd;
    public String cpu;

    public String getRam() {
        return ram;
    }

    public void setRam(String ram) {
        this.ram = ram;
    }

    public String getHdd() {
        return hdd;
    }

    public void setHdd(String hdd) {
        this.hdd = hdd;
    }

    public String getCpu() {
        return cpu;
    }

    public void setCpu(String cpu) {
        this.cpu = cpu;
    }

    public void show(){
        System.out.println("品牌資訊如下");
        System.out.println("CPu品牌"+this.cpu);
        System.out.println("硬碟資訊"+this.hdd);
        System.out.println("執行記憶體"+this.ram);
    }
}

public class TestComputer {
    public static void main(String[] args) {
        Computer computer = new Computer();
        Factory factory = new Factory();
        computer.setCpu(factory.getCpu());
        computer.setHdd(factory.getHdd());
        computer.setRam(factory.getRam());

        computer.show();
    }
}

結果展示:
在這裡插入圖片描述