2013-04-01 50 views
1

对象类引用变量可引用由某个接口引用变量挖掘的引用。我们知道Interface不能扩展任何类。因此,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); 
     } 
    } 

回答

2

的逻辑是,每个Java类是Object后代,而不论它实现任何接口。因此,任何参考可以被升级为Object

适用于您的案例的机制在JLS的§5.5.1. Reference Type Casting§5.5.3. Checked Casts at Run Time中列出。细节有点复杂,因为有编译时和运行时组件。相关的报价是:

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

如果R是一个接口:

  • 如果T是类类型,则T必须是Object(第4.3.2节),否则会引发运行时异常。
0

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