CharSequence[] items = { “Google”, “Apple”, “Microsoft” };如果CharSequence是一个接口,那么在上面的示例中,我们不是实例化一个接口吗?
发布于 2014-07-04 03:37:24
您正在实例化一个String数组,然后将它分配给具有CharSequence数组类型的变量。这是因为String可以分配给(实现) CharSequence。这里还有几个例子:
CharSequence cs = "Whatever";
List<Integer> list = new ArrayList<>();因此,您实际上正在实例化具体类型,并将它们分配给具有接口类型的变量/字段。
发布于 2014-07-04 03:42:54
下面是一个使用自定义类的类似示例:
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-04 03:48:18
CharSequence[]项目={“谷歌”、“苹果”、“微软”};
在这里,只有声明的引用变量类型是一个接口,这是正常的。
但是数组中的对象是String对象--其类实现了CharSequence接口。
假设,CharSequence[] items ={CharSequence[]()}将导致编译错误
鉴于
CharSequence[] items ={ new someclass() }
哪里
类CharSequence {
//
}
完全没问题
https://stackoverflow.com/questions/24566313
复制相似问题