带接口的对象类继承

时间:2013-04-01 07:31:28

标签: java

Can Object类引用变量可以引用某些Interface引用变量引用的引用。我们知道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 个答案:

答案 0 :(得分: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),否则会引发运行时异常。
  •   

答案 1 :(得分:0)

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