Из-за задания домашней работы, которое должно проверять наше понимание наследования, у меня есть много разных подклассов, все из которых имеют одинаковые переменные экземпляра. В каждом из этих подклассов у меня есть метод printInfo()
, который печатает все переменные экземпляра. printInfo()
точно такой же в каждом классе, в котором он существует, но я уверен, что я не могу перенести его в какой-либо из родительских классов, потому что некоторые из переменных экземпляра существуют только в этом дочернем классе (также известный как класс, который также содержит printInfo()
). Из того, что я прочитал, я могу создать ArrayList, который содержит все объекты с помощью родительского класса, как это:Можно ли вызвать тот же метод для разных типов объектов одного и того же родительского класса с ArrayList в Java?
ArrayList<Parent> myArrayList = new ArrayList<Parent>;
myArrayList.add(new Child1());
myArrayList.add(new Child2());
Моя проблема заключается в том, что я хочу, чтобы иметь возможность вызывать printInfo()
по каждому объекту в этом ArrayList. Я пытался использовать цикл как это:
for(int i = 0; i < myArrayList.size(); ++i) {
myArrayList.get(i).printInfo();
}
но не распознает мой printInfo()
метода, поскольку он существует только в подклассах, а не родительский класс, который использует ArrayList. Я предполагаю, что это потому, что ArrayList содержит объекты класса Parent, поэтому он не будет вызывать никаких функций-членов дочернего класса. Есть ли способ, которым я могу вызвать метод printInfo()
с использованием ArrayList (или аналогичной структуры данных)?
ПРИМЕЧАНИЕ: Я знаю, что эта программа плохо разработана с учетом того, что существует несколько подклассов с одинаковыми методами, но мне сказали, что это именно то, что ожидается от назначения. Мне не нужны советы о том, как реструктурировать классы, мне интересно только найти способ эффективного вызова одного и того же метода на нескольких объектах разных классов.
Я также сомневаюсь, что назначение плохо спроектировано. Вероятно, это должно научить вас наследованию. –
Я думаю, что необходимость повторного использования идентичного кода в нескольких классах с единственной целью использования наследования вместо структурирования легко читаемой и поддерживаемой программы с использованием более применимой тактики - это плохо разработанное задание. – kanderson8
Непонятно, что вы дублировали. Если вы действительно скопировали код самостоятельно, то обязательно, вы можете объединить «общие» переменные экземпляра в общий класс –