簡體   English   中英

接口類型變量可以從沒有實現它的 class 中的該接口調用方法嗎?

[英]Can interface type variable call methods from that interface in a class that doesn’t implement it?

我試圖理解這一點只是為了我自己的知識。 這是我的代碼的細分版本:

interface ILightningPhone {
    void recharge();
    void useLightning();
}

interface IMicroUsbPhone {
    void recharge();
    void useMicroUsb();
}

class LightningToMicroUsbAdapter implements IMicroUsbPhone {
    private final ILightningPhone lightningPhone;

    public LightningToMicroUsbAdapter(ILightningPhone lightningPhone) {
        this.lightningPhone = lightningPhone;
    }

    @Override
    public void useMicroUsb() {
        System.out.println("MicroUsb connected");
        lightningPhone.useLightning();
    }

    @Override
    public void recharge() {
        lightningPhone.recharge();
    }
}

我正在嘗試理解接口,我只需要對以下內容進行解釋:

  1. 我注意到一個變量private final ILightningPhone lightningPhone; ILightningPhone接口類型的 class 中聲明。 但是這個 class 沒有實現那個接口。 它是如何做到這一點的?

  2. 接下來我注意到在以下方法中:

     public void useMicroUsb() { System.out.println("MicroUsb connected"); lightningPhone.useLightning();

    變量lightningPhone能夠從ILightningPhone接口調用useLightning()方法。 即使ILightningPhone接口未在 class LightningToMicroUsbAdapter中實現。 為什么它能夠做到這一點?

總的來說,我只是想了解為什么我們能夠在不實現該接口的 class 中創建接口類型的變量? 為什么在聲明該接口類型的變量時,我們能夠在未實現該接口的 class 中使用該接口中的方法?

如果需要,這是完整的代碼: https://en.wikipedia.org/wiki/Adapter_pattern

LightningToMicroUsbAdapter class (或任何 class )可以有任何類型的成員 - 無論是StringList ,甚至是ILightningPhone 擁有成員是“hasA”關系,而不是“isA”關系。

由於lightningPhoneILightningPhone的一個實例,它可以調用該接口定義的useLightning方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM