3
CharSequence[] items = { “Google”, “Apple”, “Microsoft” };

if CharSequenceis an interface 那么,在上面的例子中我们不是在实例化一个接口吗?

4

3 回答 3

2

您正在实例化一个String数组,然后将其分配给具有CharSequence数组类型的变量。这是有效的,因为String可以分配给 (implements) CharSequence。这里还有几个例子:

CharSequence cs = "Whatever";
List<Integer> list = new ArrayList<>();

因此,您实际上是在实例化具体类型并将它们分配给具有接口类型的变量/字段。

于 2014-07-04T03:37:24.360 回答
0

这是一个使用自定义类的类似示例:

interface A{}

class A1 implements A{}

class A2 implements A{}

class A3 implements A{}

public class B {

    A[] items = {new A1(),new A2(), new A3()};

}

这里的每个对象items实际上都是实现类型 (A1,A2,A3) 而不是A它本身。

在你的例子中,这样的事情也是可能的:

CharSequence[] items = {"Google",new StringBuffer("Apple"), new StringBuilder("Microsoft")};
于 2014-07-04T03:42:54.920 回答
-1

CharSequence[] items = { “谷歌”, “苹果”, “微软” };

这里只有引用变量声明的类型是接口,没关系。

但是数组中的对象是 String 对象——其类实现了 CharSequence 接口。

比如说, CharSequence[] items = { new Charsequence() } 会导致编译错误

然而

CharSequence[] items = { new someclass() }

在哪里

类 someclass 实现 CharSequence {

//

}

完全没问题

于 2014-07-04T03:48:18.173 回答