数日前、私は単純な Java プログラムを書いていましたが、このコードが機能しないことを発見しました (コンパイル時にエラーが発生します)。
ArrayList<Document> docs = new ArrayList<Book>();
ここで、Document はインターフェイスで、Book は Document を実装します。
Javaの継承がジェネリックで機能しないのはなぜですか? そのコードを機能させたい場合は、次のようにワイルドカードを使用する必要があります。
ArrayList<? extends Document> docs = new ArrayList<Book>();
この理由は何だろう?と思いました。Document の ArrayList が必要で、Book も Document であることがわかっている場合、Book の ArrayList を Document の ArrayList として使用できないのはなぜですか?