让我们声明两个接口和一个实现它们的类:
interface I1 { }
interface I2 { }
class C implements I1, I2 { }
objects can have multiple types
在下面的代码中,可以看出C实例具有C的类型以及I1和I2:
C c = new C();
boolean isC = (c instanceof C); //true
boolean isI1 = (c instanceof I1); //true
boolean isI2 = (c instanceof I2); //true
现在让我们声明一个实现I1的类B:
class B implements I1 { }
if a variable is declared to be the type of an interface, its value can reference any object that is instantiated from any class that implements the interface.
如果我们声明一个类型为I1的变量,我们可以把它设置为C的一个实例,然后重新赋值给B的一个实例:
I1 i1 = new C();
i1 = new B();
我们还可以将其重新分配给D的一个实例,其中D扩展C:
i1 = new D();
...
class D extends C { }