Несколько дней назад я писал простую программу на Java, и я обнаружил, что этот кусок кода не работает (это дает ошибку во время компиляции):Наследование в Java генериков
ArrayList<Document> docs = new ArrayList<Book>();
где документ является интерфейсом и Book реализует документ.
Почему наследование в Java не работает с дженериками? Если я хочу, чтобы код работал, я должен использовать специальные символы, например:
ArrayList<? extends Document> docs = new ArrayList<Book>();
Я задавался вопросом, что является причиной этого? Если мне нужен ArrayList документов, и я знаю, что книга также является документом, почему я не могу использовать ArrayList of Books в качестве массива документов?
http://stackoverflow.com/questions/10770585/why-polymorphism-doesnt -treat-generic-collections-and-plain-array-the-same-way –
После того, как вы прояснили ответы о том, почему ваше первое утверждение не работает, см. [мой ответ на этот вопрос] (http: /stackoverflow.com/a/12605337/646634) для объяснения 'extends' и' super' и что они делают. – Brian