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]); } }