黑马程序员技术交流社区

标题: 关于继承的疑惑 [打印本页]

作者: yuanjun52306    时间: 2015-11-26 22:09
标题: 关于继承的疑惑
定义继承需要注意:
不要仅为了获取其他类中某个功能而去继承,类与类之间要有所属( " is a" )关系。

{:3_62:}什么意思谁能解释一下?
作者: lovetonia    时间: 2015-11-27 03:06
这个视频里面应该有讲解吧我记得。其实很简单,设定继承的时候想想现实中的是不是符合逻辑就是了,好比定义“运动员”和“快递员“两个类,运动员有奔跑功能,快递员也有,总不能因为这个让快递员去继承运动员把,他们都应该是人的子类。
作者: tansuozhey    时间: 2015-11-27 08:07
这是当然,为了获取某个功能,你可以用接口啊!
作者: xiao15779706    时间: 2015-11-27 09:01
就是儿子和父亲的关系
作者: Phy_zhang    时间: 2015-11-27 09:13
简单说,你总不能为了别人的某项技能就认人家做爹把?
作者: wyasln    时间: 2015-11-27 10:13
不是一般到特殊的一般不要继承,要用功能可以组合
作者: Little_jie    时间: 2015-11-27 10:32
is a的关系用继承,has a的关系用组合
作者: 冰霜之卅    时间: 2015-11-27 13:52
毕老师有个例子很不错。
你不能为了玩人家苹果手6s机 就叫人家爹吧?
以后不玩手机,改玩电脑了,怎么办? 你已经卖给人家当儿子了。

是的,
继承也确实能满足当前的需求 完成一样的功能,可是以后呢? 面对更多更复杂的功能和调用的时候 怎么办?
业务逻辑不清晰 功能杂乱无章。  后患无穷。 绝对不能鼠目寸光!

必须是同种类型的才可以继承!
作者: Vincent饭饭    时间: 2015-11-27 16:44
A.猫是一种动物   cat is an anmial

B.汽车是一种交通工具 Car is a transprotation

class cat extends animal {
    super();
    ......rewrite;

}


class Car extends Transportaion {
   super();

   rewirte;
}


满足功能定义用implements
作者: wqd123    时间: 2015-11-27 21:56
楼上说的很精辟
作者: weichengnian    时间: 2015-11-27 23:13
。。。  呼呼 这也是我不懂的
作者: xiaoziyk    时间: 2015-11-27 23:46
如果说程序员和项目经理两个类,他们都有敲代码的方法,这时候就不能用项目经理去继承程序员,应该向上抽取一个员工类.就是不要只为了一个敲代码的方法就随便继承
作者: yuanjun52306    时间: 2015-11-28 18:36
谢谢大家的解答啊,怎么系统没有提醒啊{:3_46:}
作者: 萧未然    时间: 2015-11-28 19:07
比如狗会睡觉,人也要睡觉,不能为了得到睡觉的功能,而继承狗吧
作者: 萧未然    时间: 2015-11-28 19:09
xiaoziyk 发表于 2015-11-27 23:46
如果说程序员和项目经理两个类,他们都有敲代码的方法,这时候就不能用项目经理去继承程序员,应该向上抽取一 ...

说的对。
作者: yuanjun52306    时间: 2015-11-28 19:22
本帖最后由 yuanjun52306 于 2015-11-28 19:42 编辑

看了大家的解答,我总结一下:

1、什么时候用继承
首先我认为初学者不用太深究,经验不足时会花很长时间也想不通,就算当时想通了也作用不大,这个问题可以简单的理解为:继承需要是子父类的关系(猫可以继承动物类,但是猫不能去继承狗类,尽管有些功能相同),这就是所谓的“不要仅为了获取其他类中某个功能而去继承”。“is a”→cat“是一个”animal(cat “is not a” dog,所以cat不能继承dog,现实中也是不合逻辑的)
2、什么时候用组合(接口)
“has a”→cat“有一个”run功能。而蝴蝶也属于动物类,它的run方法是飞“fly”。所以可以把run这个功能抽象为一个接口,此时父类animal就不需要run这个方法了,子类继承父类也不会有run方法,但可以通过实现接口的方式实现run的功能。这么做的目的我也不是很清楚,大概就是:即使父类产生了变更,子类也不会受到影响(因为run方法不是从父类继承的,而是通过单独的接口实现的)

具体原因看这里:http://www.importnew.com/12907.html




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