Fence
が struct
と等価になってしまって、最初の「不整合」なケースの前提が崩れてしまいます。逆に言えば、 Fence
も struct
なら struct Farm
は covariant 的に振る舞っても問題ないということですね。 (edited)class Animal {} class Cat extends Animal {} class Dog extends Animal {} public class CovariantArray { public static void main(String[] args) { Cat[] cats = { new Cat() }; Animal[] animals = cats; animals[0] = new Dog(); // 実行時エラー System.out.println(cats[0]); } }