NSMutableString
继承自NSString
,但是
继承是一种“是”关系。所以猫“是”动物。但是一个
NSMutableString
“不是”一个NSString
。(因为NSString
不能变异(不能改变))通常,子类能做什么,那么基类应该能做什么。比如鱼会游泳,有些动物会游泳。但是一个
NSMutableString
可以改变,而且NSString
根本不能改变——没有NSString
任何东西可以改变。
那么为什么NSMutableString
继承自NSString
?此外,NSMutableArray
继承自NSArray
. 不应该NSString
继承自NSMutableArray instead
,而是将“不更改标志”设置为 YES ?这背后的原理是什么?
更新:一些答案会说:NSMutableString
可以做所有可以做的事情NSString
,因此NSMutableString
继承自NSString
. 但是这个原理能用吗?石头可以静止不动。猫可以静止不动,也可以移动。猫可以做石头能做的所有事情,但我们不能让猫继承石头,对吧?
如果我有两个游戏对象类:一个是弹性对象,一个是非弹性对象,我认为将弹性对象实现为基类是有意义的,并且非弹性对象从它继承并带有表示外部边界的标志不能变。