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);
}
}
答案 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
的层次结构。