1

对象类引用变量是否可以引用某些接口引用变量所占用的引用。正如我们所知,接口不能扩展任何类。所以 Object 类的默认继承是否适用于这种情况。显然答案是肯定的,但这背后的逻辑是什么。?

    public interface ToTest {

    }

    public class ToTestImpl implements ToTest{

    }

    public class ToTestClass {

        public static void main(String args[]){
            ToTest test = new ToTestImpl();
            Object o = test;
            System.out.println(o);
        }
    }
4

2 回答 2

2

逻辑是每个 Java 类都是 的后代Object,与它实现的任何接口无关。因此,任何引用都可以向上转换为Object.

适用于您的案例的机制在§5.5.1 中有详细说明。参考类型转换§5.5.3。在 JLS运行时检查演员表。细节有点复杂,因为既有编译时组件又有运行时组件。相关报价为:

这是检查R对象的运行时类型是否与类型兼容的算法T...

如果R是一个接口:

  • 如果T是类类型,则T必须是Object(第 4.3.2 节),否则会引发运行时异常。
于 2013-04-01T07:33:37.460 回答
0

是的,它会工作。因为,编译器知道interfaces并不意味着要实例化。因此,即使您分配了对 的interface引用Object,很明显它的任何实现都interface将来自Object的层次结构。

于 2013-04-01T07:34:58.497 回答