接口作为Java中的一种类型?

2022-09-01 04:08:58

来自 Java 教程

在Java中,一个类只能从一个类继承,但它可以实现多个接口。因此,对象可以具有多种类型:它们自己的类的类型以及它们实现的所有接口的类型。这意味着,如果将变量声明为接口的类型,则其值可以引用从实现该接口的任何类实例化的任何对象

任何人都可以为此为我提供一个基本的伪类型。我不明白粗体字。


答案 1

让我们声明两个接口和一个同时实现它们的类:

interface I1 { }

interface I2 { }

class C implements I1, I2 { }

对象可以具有多种类型

在下面的代码中,可以看到实例的类型以及 and :CCI1I2

C c = new C();

boolean isC = (c instanceof C);   //true
boolean isI1 = (c instanceof I1); //true
boolean isI2 = (c instanceof I2); //true

现在,让我们声明一个也实现的类:BI1

class B implements I1 { }

如果将变量声明为接口的类型,则其值可以引用从实现该接口的任何类实例化的任何对象。

如果我们声明一个类型的变量,我们可以将其设置为 的实例,然后将其重新分配给的实例:I1CB

I1 i1 = new C();
i1 = new B();

我们也可以将其重新分配给 的实例,其中 extends :DDC

i1 = new D();

...

class D extends C { }

答案 2

请考虑以下示例:

Serializable s = new ArrayList();

在Java中,这是有效的代码,即使它是一个接口,因为实现了。因此,在本例中,我们将视为 类型的变量。SerializableArrayListSerializablesSerializable

现在假设我们按照下面的代码跟进:

s = "String object";

这也是有效的,因为也实现了 。由于我们声明为 type ,它可以指向实现该接口的任何对象。StringSerializablesSerializable