![](/img/trans.png)
[英]ArrayList in Java doesn't implement methods from Collection interface?
[英]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();
}
}
我正在尝试理解接口,我只需要对以下内容进行解释:
我注意到一个变量private final ILightningPhone lightningPhone;
在ILightningPhone
接口类型的 class 中声明。 但是这个 class 没有实现那个接口。 它是如何做到这一点的?
接下来我注意到在以下方法中:
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 )可以有任何类型的成员 - 无论是String
, List
,甚至是ILightningPhone
。 拥有成员是“hasA”关系,而不是“isA”关系。
由于lightningPhone
是ILightningPhone
的一个实例,它可以调用该接口定义的useLightning
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.