为什么我们可以将Java接口转换为*any*非final类?

Jac*_*ith 4 java interface downcast

import java.util.Collection;


public class Test
{
    public static void main(String[] args)
    {
        Collection c = null;
        Test s = null;

        s = (Test) c;
    }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,我将一个集合对象转换为Test对象.(忽略空指针).Test 与Collection 无关,但该程序将通过所有编译时检查.

我想知道为什么会这样.我的假设是接口被忽略,因为它们太复杂了.它们没有通用的超类型,每个类都可以实现多个接口,因此类/接口层次结构太复杂而无法有效搜索?

除此之外,我很难过.有人知道吗?!

Chs*_*y76 8

"非最终"是这里的关键字.你可能还有另一堂课

public class Test2 extends Test implements Collection
Run Code Online (Sandbox Code Playgroud)

其实例将最终被指定为s使演员完全合法.