不是因为它们是集合类,而是因为它们是 接口 。
Foo没有实现它们,但是可以实现它的子类。因此,这不是编译时错误,因为这些方法可能对子类有效。在
运行时 ,如果
this不是实现这些接口的类,则自然是运行时错误。
如果更改
List<String>为
ArrayList<String>,则也会由于该
Foo子类实现
List,但不能扩展
ArrayList(因为不能扩展
Foo),因此也会出现编译时错误。同样,如果您使用make
Foo
final,则编译器将为您的接口类型转换给您一个错误,因为它知道它们永远不可能是真实的(因为
Foo不能有子类,并且不能实现这些接口)。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)