黑马程序员技术交流社区

标题: 关于张孝祥精通面向对象的分析和设计的疑问 [打印本页]

作者: Teemo_Mann    时间: 2014-4-16 12:29
标题: 关于张孝祥精通面向对象的分析和设计的疑问
本帖最后由 Teemo_Mann 于 2014-4-17 22:55 编辑

看视频有个疑问
两个石头做成一把石斧,张老师设计的方式是用一个StoneKnifeFactory.newCreate("stone")的工厂模式,但是这里能不能用一个StoneKnife类继承Stone类来设计呢,毕竟石斧和石头也有继承关系吗,求指教
作者: 水竹    时间: 2014-4-16 12:34
knife不是小刀么
作者: 呆呆沙师妹    时间: 2014-4-16 14:27
我觉得张老师的更好,做斧头的材料不限于石头一种。
虽然石头和石斧有相关关系,但是设计继承关系时,还是应该考虑多一些。
我最近刚看到一篇文章提到设计继承关系的技巧的建议。是这样的
1、将公共操作和成员变量定义在超类;
2、尽量少使用protected修饰符;
3、使用继承实现“is-a”关系;
4、除非所有继承的方法都有意义,否则不要使用继承;
5、在覆盖方法的时候,不要改变预期的行为;
6、使用多态,则非类型信息。

对于第3点,石斧是一块石头,感觉是有些不对劲吧,石斧做为斧头的子类或许更好一些。
作者: Teemo_Mann    时间: 2014-4-16 19:04
呆呆沙师妹 发表于 2014-4-16 14:27
我觉得张老师的更好,做斧头的材料不限于石头一种。
虽然石头和石斧有相关关系,但是设计继承关系时,还是 ...

受教了 is-a关系确实牵强了一点,但是如果这题是石头可以做成石碑,石头可以做成石斧,石头可以做成....我觉得应该是is-a关系了,你的观点呢
作者: 呆呆沙师妹    时间: 2014-4-16 19:55
Teemo_Mann 发表于 2014-4-16 19:04
受教了 is-a关系确实牵强了一点,但是如果这题是石头可以做成石碑,石头可以做成石斧,石头可以做成....我觉 ...

我对继承关系的理解也不是很到位。但我觉得,父类应是子类共性的抽象,石碑、石斧等它们有个共同特点是用石头制成(抱歉,我想象力有点贫乏。。。),就这样确立继承关系是否有点不合适?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2