我在理解下面给出的java代码示例中第7行的**((Edible)objects[i]).howToEat()**时遇到了问题。Edible是一个包含抽象方法howToEat()的接口,我理解这是对数组的引用,但在此语句中如何引用“Edible”接口?
public class TestEdible {
public static void main(String[] args) {
Object[] objects = {new Tiger(), new Chicken(), new Apple()};
for (int i= 0; i <objects.length; i++) {
if(objects[i] instanceof Edible) {
System.out.println( ((Edible)objects[i]).howToEat() );
}
else {
System.out.println("Object is not edible");
}
}
}
}
请解释接口是否是从语句中的对象或数组引用的,或者这只是一个我可能不熟悉的与接口相关的语法。我不太熟悉接口的使用,所以我可能忽略了一些东西,谢谢。
1条答案
按热度按时间snz8szmq1#
((Edible)objects[i])
语法意味着 * 将objects[i]
转换为Edible
*。它可以只是(Edible)objects[i]
。它被 Package 在方括号中,只是为了在下面的方法调用中内联它。所以代码
可以重写为更容易阅读:
因此,您基本上是在告诉Java编译器,您希望将
object[i]
作为Edible
进行威胁,因为您知道自己要做什么,并且已经使用上面的instanceof
进行了检查。正如@daniu所指出的,在Java 16中,您可以使用另一种语法: