Avatar
↑だと Fencestruct と等価になってしまって、最初の「不整合」なケースの前提が崩れてしまいます。逆に言えば、 Fencestruct なら struct Farm は covariant 的に振る舞っても問題ないということですね。 (edited)
4:38 AM
ちなみに、 Java の配列は variance 周りがぶっ壊れてるので、コンパイルエラーで検出できずに実行時エラーになる。 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]); } }