实例化接口CharSequence

时间:2014-07-04 03:33:56

标签: java interface charsequence

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

如果CharSequence是一个接口,那么在上面的例子中我们不是实例化一个接口吗?

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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")};

答案 2 :(得分:-1)

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

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

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

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

,而

CharSequence [] items = {new someclass()}

其中

class someclass实现CharSequence {

//

}

完全没法