有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java显式引用转换

为什么没有编译器错误铸造号码列表?我认为这些类型必须相互关联

Number k = 10;
List m = new ArrayList();
m = (List)k;

共 (1) 个答案

  1. # 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兼容的类型,则将毫无例外地运行

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