Я пытаюсь понять полиморфизм и лучшие практики при работе с наследованием через подклассы и суперклассы.У меня есть три класса: предметы, книги и DVD.Items - это суперкласс, где Books и DVD - это подклассы, расширяющие Items.
Сначала я попытался сохранить новые объекты типа Book и DVD в списке массивов типа Items, который работал нормально.
ArrayList<Items> library = new ArrayList<Items>;
library.add(new DVD(...));
library.add(new Book(...));
Проблема возникает, когда я пытался вызвать метод getRuntime из подкласса DVD.Это вернет длину пробега DVD.Я не могу переместить этот метод в суперкласс Items, и он не будет применим к книге.
library.get(0).getRuntime();
Я могу понять, почему я получаю ошибку, объект в списке массивов сохраняется типаПредметы, и могут получить доступ только к методам в классе Предметов.Таким образом, один из вариантов - приведение к нужному типу подкласса:
((DVD) library.get(0)).getRuntime();
Но что, если я вызываю много методов из подкласса, придется ли мне приводить каждый раз?Кроме того, использование литья, как это считается плохой практикой?
Мой другой вариант - создать два отдельных списка массивов для каждого подкласса:
ArrayList<DVD> libraryDvds = new ArrayList<DVD>;
ArrayList<Books> libraryBooks = new ArrayList<Books>;
Хотя это не разрушает точку полиморфизма?Кроме того, скажем, что теперь я хочу напечатать список всех своих элементов, мне придется вызывать оба списка массивов, а не только тот, который содержит их все.
Спасибо за любую помощь, я могу предоставить более подробный кодпримеры при необходимости.