Я не написал Java-код более 10 лет. Мне это нравится, но я не думаю, что я получу некоторые детали полиморфного программирования. У меня есть абстрактный класс Node, у которого есть подклассы меток и данных (среди прочих), и я храню их в ArrayList.Понимание полиморфизма в Java
Но когда я получаю их из ArrayList через Iterator, я возвращаю объекты Node. Я не уверен, как лучше иметь дело с объектами, которые я получаю от итератора.
Вот пример:
// initialize the list
TagNode tag = new TagNode();
ArrayList<Node> list = new ArrayList<>();
list.add(tag);
// And many more go into the list, some TagNodes, some DataNodes, etc.
, а затем я использую итератор для их обработки:
Iterator<Node> i = list.iterator();
Node n = i.next();
// How do I tell if n is a TagNode or a DataNode?
Я знаю, что я могу бросить в один из узлов подклассов, но, как я знаю, какой подкласс использовать? Нужно ли вводить информацию типа внутри классов Node?
Весь смысл полиморфизма заключается в том, что вы ** не ** должны знать, какой подкласс у вас есть. Вы используете переопределения методов для обеспечения отличительного поведения. –