effective 44告诉我们:pure fun意味着:subclass必须继承并且实现代码,而这个地方是个private,显然无法直接继承(请注意直接两个字),也是我们第一眼看上去无法理解的,也是和文章的主人翁一样的感受,其实由于template method是个以base 提供接口的方法,而subclass只是实现其中的代码,所以从语意上说当然是可以。
实现上如下:
a --> base class private pure fun
b --> subclass private fun --> 实现 base 的private pure fun
这样,事实上是"继承"了原函数,也满足需求,
有人要问为什么放在private而不是protected,类似Tthread的execute(pure protected)
你可以从语意上理解,假设还有一个c 继承b,如果没有提供fun的话,那fun对c是隐藏的,而protected则是公开的。。