A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yuanjun52306 中级黑马   /  2015-11-26 22:09  /  746 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义继承需要注意:
不要仅为了获取其他类中某个功能而去继承,类与类之间要有所属( " is a" )关系。

{:3_62:}什么意思谁能解释一下?

15 个回复

倒序浏览
这个视频里面应该有讲解吧我记得。其实很简单,设定继承的时候想想现实中的是不是符合逻辑就是了,好比定义“运动员”和“快递员“两个类,运动员有奔跑功能,快递员也有,总不能因为这个让快递员去继承运动员把,他们都应该是人的子类。
回复 使用道具 举报
这是当然,为了获取某个功能,你可以用接口啊!
回复 使用道具 举报
就是儿子和父亲的关系
回复 使用道具 举报
简单说,你总不能为了别人的某项技能就认人家做爹把?
回复 使用道具 举报
不是一般到特殊的一般不要继承,要用功能可以组合
回复 使用道具 举报
is a的关系用继承,has a的关系用组合
回复 使用道具 举报
毕老师有个例子很不错。
你不能为了玩人家苹果手6s机 就叫人家爹吧?
以后不玩手机,改玩电脑了,怎么办? 你已经卖给人家当儿子了。

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

必须是同种类型的才可以继承!
回复 使用道具 举报
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:58
10#
楼上说的很精辟
回复 使用道具 举报
。。。  呼呼 这也是我不懂的
回复 使用道具 举报
如果说程序员和项目经理两个类,他们都有敲代码的方法,这时候就不能用项目经理去继承程序员,应该向上抽取一个员工类.就是不要只为了一个敲代码的方法就随便继承
回复 使用道具 举报
谢谢大家的解答啊,怎么系统没有提醒啊{:3_46:}
回复 使用道具 举报
比如狗会睡觉,人也要睡觉,不能为了得到睡觉的功能,而继承狗吧
回复 使用道具 举报
xiaoziyk 发表于 2015-11-27 23:46
如果说程序员和项目经理两个类,他们都有敲代码的方法,这时候就不能用项目经理去继承程序员,应该向上抽取一 ...

说的对。
回复 使用道具 举报
本帖最后由 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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马