树类模块制作心得
开始设计的时候,总把树类和树结点类混淆,本来各个树类之间应该有继承关系,而我把结点类也来个继承。而结点类是自引用的(自反的,我这样叫),结点的一个实例要引用结点的另一些实例的集合,那么一旦由结点类A扩展出结点类B的时候,B是无法通过显示转换的方式转换为A结点的,于是这就与树类的继承相矛盾了。
这个问题想了N个月,没想明白。曾经放弃过,最近要做另一个模块,其中需要树类结构,所以又回来考虑,最后终于想明白了,就是上面所说的原因。树结点并不需要继承,只需要在各个继承的树类之间都是用相同的结点类就可以了(二叉树好象需要除外),只要结点不需要提供新的属性,就不派生,从而保持树类间方法的更大兼容性。
二叉树结点由于扩展了树结点,需要用左孩子和右孩子的形式,所以二叉树就无法继承N叉树了(也就是无法继承树类)。