到底怎么办:“是一个”与“有一个”

上节课我们具体地讲述了继承的机制,并且也设计了一个继承树,那么问题来了:我不是要问挖掘机技术哪家强?我是要问如何来确定一个类是另一个类的子类呢?我们又如何设计一个类而不是某个类中的属性呢?

“是一个”与“有一个”

这里我们就要用这么一个方法来检验它们二者之间的关系了:

我们说,手枪是枪械——OK,没有问题,那么手枪这个类就是枪械的子类。

还有长剑是一把剑,是一个冷兵器——没问题,那这样一个顺序的继承树就出来了。

或者……手机是一个显示器?——好吧,手机有一个显示器或许会更恰当一些,那么显示器就是手机的一个属性了。

显示器有二极管——OK,二极管就是显示器的属性。

我们靠这样的一种思考方法,能够快速甄别继承树的设计是否符合逻辑。

对了

这个测试的方法还不仅关乎与二者之间,一个继承树最底端类应该也能对最顶端的类有“是一个”这样的关系——比如“手枪是武器”这样,如果不行,那你的继承树设计恐怕就有了问题。

 

顺序问题

我们一直在说继承树,所以说这是一个树状的拓扑,子类一定拥有父类,但父类可不一定就拥有子类——所以说父类并不能知道子类的方法,相反,在子类里我们可以使用 super 这个关键字来调用父类里的方法,比如我要扩充一下枪械的攻击方法,就可以这样来做:

 

我的日记本呢?

还记得我们说过日记本和 private 的比喻吗?标记为私有的方法和属性是不能被别人读取的!你的孩子在未经你许可的情况下也一样不能偷看你的日记!

所以我们说子类继承了父类所有成员的时候,其实是不包括私有方法和属性的!这些成员只在本类里可见哟~

“到底怎么办:“是一个”与“有一个””的一个回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注

16 + = 25