Java显式引用转换

ude*_*eng 8 java

为什么没有编译器错误将数字转换为List?我认为类型必须是相关的.

Number k = 10;
List m = new ArrayList();
m = (List)k;
Run Code Online (Sandbox Code Playgroud)

Bal*_*a R 9

只是猜测,但我认为它与m作为界面参考有关.如果将其更改为ArrayList m = new ArrayList();,则显示编译时错误.

我认为类型必须是相关的.

Number是一个类(抽象),List是一个接口,因此它们可以通过另一个类相关联.

所以技术上你可以

class Foo extends Number implements List
{
   ... 
}
Run Code Online (Sandbox Code Playgroud)

    Number k = ... ; // 
    List m = new Foo();
    m = (List) k;
Run Code Online (Sandbox Code Playgroud)

如果k指向兼容的类型,则可能是合法的并且将毫无例外地运行Foo.

因此,如果您通过接口引用对象,则解析将延迟到运行时.

  • 这有点意义. (2认同)