Java显式引用转换 3 周,2 日 Questions & Answers 548 为什么没有编译器错误铸造号码列表?我认为这些类型必须相互关联 Number k = 10; List m = new ArrayList(); m = (List)k;
# 1 楼答案 只是一个猜测,但我认为这与m作为接口引用有关。如果将其更改为ArrayList m = new ArrayList();,则会显示编译时错误 I thought the types had to be relate. Number是一个类(抽象),List是一个接口,因此它们可以通过另一个类进行关联 所以从技术上来说你可以 class Foo extends Number implements List { ... } 及 Number k = ... ; // List m = new Foo(); m = (List) k; 可能是合法的,如果k指向与Foo兼容的类型,则将毫无例外地运行 因此,如果通过接口引用对象,解析将推迟到运行时
# 1 楼答案
只是一个猜测,但我认为这与
m
作为接口引用有关。如果将其更改为ArrayList m = new ArrayList();
,则会显示编译时错误Number是一个类(抽象),List是一个接口,因此它们可以通过另一个类进行关联
所以从技术上来说你可以
及
可能是合法的,如果k指向与
Foo
兼容的类型,则将毫无例外地运行因此,如果通过接口引用对象,解析将推迟到运行时