Java中的思维导致运行时升级失败

Java中的思维导致运行时升级失败,java,runtime-error,upcasting,Java,Runtime Error,Upcasting,运行此代码时,为什么会出现运行时错误? 数组被定义为保存水果,但是在我用apple初始化它之后,我怎么能不给它水果呢 class Fruit{} class Apple extends Fruit{} class Jonathan extends Apple{} class Orange extends Fruit{} public class CovariantArrays { public static void main(String[] args) { Frui

运行此代码时,为什么会出现运行时错误? 数组被定义为保存水果,但是在我用apple初始化它之后,我怎么能不给它水果呢

class Fruit{}
class Apple extends Fruit{}
class Jonathan extends Apple{}
class Orange extends Fruit{}

public class CovariantArrays {
    public static void main(String[] args) {
        Fruit[] fruit = new Apple[10];
        fruit[0] = new Apple();
        fruit[1] = new Jonathan();
        try {
            fruit[0] = new Fruit();
        } catch(Exception e) { System.out.println(e); }
        try {
            fruit[0] = new Orange();
        } catch(Exception e) { System.out.println(e); }
    }
}

尝试将其放入数组类型:

fruit[0] = (Fruit) new Apple();

原因是您试图将
水果
橙色
放入
苹果
中。 你只能把东西放进苹果[]里面,如果它真的是苹果的话

class Fruit{}
class Apple extends Fruit{}
class Jonathan extends Apple{}
class Orange extends Fruit{}
class BigApple extends Apple{}
class BigGreenApple extends BigApple{}

public class CovariantArrays {
    public static void main(String[] args) {
        Fruit[] fruit = new Apple[10];
        fruit[0] = new Apple();
        fruit[1] = new Jonathan(); // no error here since Jonathan is an Apple
        fruit[2] = new BigApple(); // still Apple
        fruit[3] = new BigGreenApple(); // no worries - still Apple
        fruit[4] = new Orange(); // Oops - Orange is a Fruit but its not Apple so error here
    }
}

该阵列是一个
Apple[]
。为什么你会期望它能够容纳一些不是苹果的东西呢?