プログラミング言語のクラスで、「共変性の引数型は実際には安全ですが、有用であることがわかっていないため、実際の言語ではサポートされていない」ことを学びました。それらはサポートされていませんが、私たちが与えられたこの例のようなものが、理論的には「安全」である理由について私は混乱しています。
class Animal {
...
public bool compare(Panda) { ... }
}
class Panda extends Animal {
...
public bool compare(Animal) { ... }
}
私が理解していることから、サブタイピングの問題は、特異性の喪失を引き起こす可能性のある何かが行われたときに発生します。それで、私がこれをした場合はどうなりますか?:
Panda p = new Panda();
Animal a = new Animal
...
p.compare(a);
私がこれを見ると、パンダは普通の動物が知らないであろういくつかの余分なフィールドをそこに持つことができた(そしておそらくそうしている)ようです。したがって、動物固有のデータメンバーがすべて同じであっても、パンダは他の異なるものを持つことができます。それはどうやってそれを普通の動物と比較しても大丈夫でしょうか?動物だけのものを考慮し、残りを無視するでしょうか?