接口作为Java中的一种类型?
来自 Java 教程:
在Java中,一个类只能从一个类继承,但它可以实现多个接口。因此,对象可以具有多种类型:它们自己的类的类型以及它们实现的所有接口的类型。这意味着,如果将变量声明为接口的类型,则其值可以引用从实现该接口的任何类实例化的任何对象。
任何人都可以为此为我提供一个基本的伪类型。我不明白粗体字。
来自 Java 教程:
在Java中,一个类只能从一个类继承,但它可以实现多个接口。因此,对象可以具有多种类型:它们自己的类的类型以及它们实现的所有接口的类型。这意味着,如果将变量声明为接口的类型,则其值可以引用从实现该接口的任何类实例化的任何对象。
任何人都可以为此为我提供一个基本的伪类型。我不明白粗体字。
让我们声明两个接口和一个同时实现它们的类:
interface I1 { }
interface I2 { }
class C implements I1, I2 { }
对象可以具有多种类型
在下面的代码中,可以看到实例的类型以及 and :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
现在,让我们声明一个也实现的类:B
I1
class B implements I1 { }
如果将变量声明为接口的类型,则其值可以引用从实现该接口的任何类实例化的任何对象。
如果我们声明一个类型的变量,我们可以将其设置为 的实例,然后将其重新分配给的实例:I1
C
B
I1 i1 = new C();
i1 = new B();
我们也可以将其重新分配给 的实例,其中 extends :D
D
C
i1 = new D();
...
class D extends C { }
请考虑以下示例:
Serializable s = new ArrayList();
在Java中,这是有效的代码,即使它是一个接口,因为实现了。因此,在本例中,我们将视为 类型的变量。Serializable
ArrayList
Serializable
s
Serializable
现在假设我们按照下面的代码跟进:
s = "String object";
这也是有效的,因为也实现了 。由于我们声明为 type ,它可以指向实现该接口的任何对象。String
Serializable
s
Serializable