Java 接口引用是否需要将强制转换指定给类对象引用?

Java 接口引用是否需要将强制转换指定给类对象引用?,java,inheritance,interface,casting,reference,Java,Inheritance,Interface,Casting,Reference,在为Java SE 8程序员I(原OCA)认证考试复习时,我遇到了以下陈述: “对接口的引用需要指定显式转换 任何类的引用,即使是实现接口的类。 接口引用需要将显式转换指定给 类引用。” 我认为这有点不准确,因为在没有显式转换的情况下,可以将接口的引用指定给类对象的引用 interface Animal {} public class Dog implements Animal { public static void main(String[] args) { Ani

在为Java SE 8程序员I(原OCA)认证考试复习时,我遇到了以下陈述:

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

我认为这有点不准确,因为在没有显式转换的情况下,可以将接口的引用指定给类对象的引用

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
    }
}
这是因为对象类和接口之间的链接类似于与类文件格式相关的中所述的链接吗?
关于使用接口引用访问Java对象类方法,我总结如下:

  • 使用接口引用,只能访问中定义的方法 接口,而不是特定于类的方法
  • 接口具有类对象的“隐藏声明”方法
  • 您可以通过任何接口引用访问对象类的方法,因为 不从对象类扩展,Java中的每个根接口都有 对象类中每个方法对应的方法
:

如果接口没有直接的超级接口,则接口 隐式声明带有签名的公共抽象成员方法m s、 返回类型r,并抛出与每个公共 带有签名s、返回类型r和抛出子句t的实例方法m 在对象中声明,除非具有相同签名的方法 返回类型,并且由 界面


看起来语句的作者可能忘记了
对象
类型。
这是由于对象类
之间的链接造成的吗?是的。嘿!首先,感谢您花时间编写和格式化问题。第二,我想你自己已经回答了。无论如何,为了清楚起见,接口只不过是类的模板,因为所有类都继承自
对象
,所以给定的代码都是这样工作的。看起来语句的作者可能忘记了
对象
类型。
这是因为对象类之间的链接
-是的。嘿!首先,感谢您花时间编写和格式化问题。第二,我想你自己已经回答了。无论如何,为了清楚起见,接口只不过是类的模板,因为所有类都继承自
Object
,所以给定代码的工作方式就是这样。