首页 > 解决方案 > 接口引用是否需要将强制转换分配给类对象引用?

问题描述

在复习 Java SE 8 Programmer I(以前称为 OCA)认证考试时,我遇到了以下声明:

“对接口的引用需要将显式转换分配给任何类的引用,即使是实现接口的类。接口引用需要将显式转换分配给类引用。”

我认为这有点不准确,因为可以将接口的引用分配给 Object 类的引用而无需显式强制转换。

interface Animal {}

public class Dog implements Animal {
    public static void main(String[] args) {
        Animal animal = new Dog();
        Dog dog = animal; // Doesn't compile - requires explicit cast to Dog
        Object o = animal; // Compiles
    }
}

这是由于 Object 类和接口之间的链接类似于此答案中描述的与类文件格式相关的链接吗?
这个与使用接口引用访问 Java Object 类方法相关的答案中,我总结了:

JLS §9.2 - 接口成员

如果接口没有直接的超接口,则接口隐式声明一个公共抽象成员方法 m,其签名为 s,返回类型为 r,并且 throws 子句 t 对应于每个签名为 s、返回类型为 r 和 throws 子句的公共实例方法 m在 Object 中声明,除非接口显式声明了具有相同签名、相同返回类型和兼容 throws 子句的方法。

标签: javainheritanceinterfacecastingreference

解决方案


推荐阅读