Java 将堆栈铸造到Iterable

Java 将堆栈铸造到Iterable,java,casting,iterable,Java,Casting,Iterable,在下面的代码中,该方法返回一个堆栈对象,该对象被强制转换为Iterable Iterable是接口而不是类。您能告诉我,在这种情况下,强制转换是如何工作的吗?这里没有实际的强制转换-只是从堆栈到Iterable的隐式转换,因为通过扩展Vector隐式实现Iterable,Vector扩展AbstractList,AbstractCollection,Collection,Iterable 如果它没有实现接口,隐式转换将在编译时被禁止,显式转换将在执行时失败。Java不使用duck类型。在Java

在下面的代码中,该方法返回一个堆栈对象,该对象被强制转换为Iterable


Iterable是接口而不是类。您能告诉我,在这种情况下,强制转换是如何工作的吗?

这里没有实际的强制转换-只是从堆栈到Iterable的隐式转换,因为通过扩展Vector隐式实现Iterable,Vector扩展AbstractList,AbstractCollection,Collection,Iterable


如果它没有实现接口,隐式转换将在编译时被禁止,显式转换将在执行时失败。Java不使用duck类型。

在Java中,每当创建对象时,它都被创建为某个类的对象。然后,指向该对象的指针可以存储在同一类或该类的超类的任何变量中

当您希望将其存储为超类,而将其存储为创建它的同一个类,或其较低的超类时,可以使用强制转换

一个简单的示例,假设Sub正在扩展Super:

Super super = new Sub();
if (super instanceof Sub)
    Sub sub = (Sub) super;

这不会编译:列表是一个接口,您不能实例化接口。您至少应该首先遵循javadoc@IngoBürk:谢谢。虽然我知道casting对子类的作用,但我不确定它如何处理与我的问题无关的接口。Iterable不是一个班级谢谢!我知道一般情况下类的强制转换是如何工作的,但不确定在实现接口时会发生什么。
Super super = new Sub();
if (super instanceof Sub)
    Sub sub = (Sub) super;