繁体   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