Вы говорите об иерархии классов, где родительский класс знает о своих дочерних классах?
Вам следует избегать этого любой ценой.
По умолчанию дочерний класс знает все о родительском классе , поскольку он является экземпляром родительского класса . Но чтобы родительский класс знал о своих дочерних классах, необходимо, чтобы дочерний класс также знал все о каждом другом дочернем классе. Это создает зависимость между одним дочерним элементом и каждым другим дочерним элементом этого класса. Это не поддерживаемый сценарий, который будет вызывать проблемы в будущем - если вы даже можете заставить его скомпилировать или запустить, что во многих языках не будет иметь место.
Тем не менее, для меня это звучит так, будто вы пытаетесь создать не иерархию классов, а иерархию коллекций, то есть дерево. В этом случае, да, вы на правильном пути; это обычная парадигма У родительского узла есть коллекция дочерних узлов, а у дочернего узла есть ссылка на родительский узел.
Дело в том? Они все одного класса ! Вот очень простой пример в C #:
public class Node
{
public readonly Node Parent; // null Parent indicates root node
public readonly List<Node> Children = new List<Node>();
public Node(Node parent)
{
Parent = parent;
}
public Node()
{
parent = null;
}
public void AddChild(Node node)
{
Children.Add(node);
}
}
У меня такое чувство, что это то, что вам действительно нужно. Используя эту парадигму, вы бы подкласса Node делали для любых гнусных целей.