我想向大家请教个java语言本质点的一个问题,请高人帮忙解答下。
首先,java语言是一种语言,它要解决问题,首先就必须描述清问题域的对象,将其抽象成类,这是基础。
这样的话,比如我想描述猫头鹰这个对象,请问它是继承了猫实现了飞的接口呢,还是继承自鹰实现了猫的接口?这个例子可能不太恰当。
如果用对人的描述,可能会好点。很显然一个人是继承自其父母的,而Java中不允许多重继承?请问这样应该怎么描述呢?

解决方案 »

  1.   

    java中确实再类这一级别没有多继承,如果实际业务中真的出现这样的情况,可以将多继承转化为单继承和接口的关系.如果业务实体可以用接口来表示,那么java中接口是可以多继承的.
      

  2.   

    猫是哺乳动物,猫头鹰是鸟类,生蛋滴。呵呵,Java中可以用接口或者内部类来实现多继承。
      

  3.   

    如果用人举例子的话 应该是人继承自生物实现了说话,吃饭等接口  可以这样说吧
    继承是(is-a)的关系
    组合是(has-a)的关系
      

  4.   

    面向对象的思想本来就是为了迎合人类思想,方便理解产生的.有维护简单,扩展性好,代码重用好的优点.
    但不要把对象和现实中的对象硬生生的搅合在一起,那样就是钻牛角尖了.就像刚才说的为什么人只能继承一个的问题明显就是钻牛角尖了.c++就能多继承,但是这样容易引起混乱,到JAVA中所以就取消了.设计JAVA语言的时候就没有硬是要它一定符合现实逻楫..你才是思想的主宰者,不能让思想来主宰你...
      

  5.   

    首先很感谢大家的答复 ,尤其是
    huagongxiamikaidaben,Hei_Hei,ZiSheng 
    按照他们的解释,就能清楚点了
    小孩 是人(is a )
    有父母(has a)
    小孩可能会长得象父母(属性),有些行为象父母(方法)(其成员变量有父母)
    其实,一种思想的兴起,不只是为了迎合人们的思想,更重要的是拓展人们的思想,比如早期的面向过程的思想,还不是为了迎合人们研发,开发不太复杂的系统的思想而产生的吗?到后来,由这种思想研发,开发而系统产生了问题,从而导致面向对象的思想的兴起。我相信随着面向对象思想也会迟早被其他某某思想替换的。我不是钻牛角尖,想要解决问题,就必须首先描述清楚,不然很难确定问题域,就没法分析,也就谈不上解决了。用java解决问题,不用java描述清楚问题,就没法用java思考
      

  6.   

    尽量用has-a合成,少用is-a继承;
    尽量继承于抽象,尽量依赖于接口而不是实现。
    我师傅说的,还有就是思想很重要。
      

  7.   

    接口解决了 java不能实现 多重继承的问题!
      

  8.   

    java中使用接口可实现多继承。
      

  9.   

    首先,我觉得LZ的问题应改为 关于面向对象的思想,而不是Java语言...
    其次,楼主提到了猫头鹰的问题,我觉得这肯定是要视现实情况而定的,继承的好处是可以在父类中有具体的实现,而被所有的子类所共享,但Java不允许多继承,当一个类同时拥有几个类(接口)的特征时,要用接口.而接口只是定义了一组方法的特征(方法名,参数表等),不具有任何实现,所以在每个子类中都要重新实现一遍. 
    所以关于楼主说的猫头鹰的问题,我觉得大体上可以这样分析:
    因为猫头鹰和鹰的飞行方式不同,所以用接口来描述飞比较合适.
    而因为猫的很多属性特征和猫头鹰是相同的(长的很像),所以用抽象类,然后猫头鹰继承比较合适 。关于一个人“继承"自父母,我一直认为这是语言的误导,他们应该都是Person的对象,如果非要说继承也是继承自Animal.
      

  10.   

    java与C++最大的区别在于它没有多重继承,而把多重继承设计成了接口,一个类可以实现多个接口,
    而只能继承自一个类,但是接口作为纯粹抽象的类,可以继承(extends)多个接口,用来实现类的多样化。
    接口就像是学生上课,学生A既是体育老师的学生,又是音乐老师的学生(实现了多个接口),但是音乐老师和体育老师
    直接可能根本就没联系,只是他们和类有关系而已,而一个学生就只能是一个班的学生(只能继承一个类)。
      

  11.   

    看怎么写了~~~多实现在java里也是可以的~~~~
      

  12.   

    猫头鹰不用实现飞的接口
    飞是一种能力,是has-a的关系,不是is-a
    is-a应该继承或实现
    has-a应该聚合,依赖
    use-a应该关联
      

  13.   

    不好意思,是不要用继承(猫头鹰可以实现飞的接口,不要继承)
    个人理解,继承关系必须满足is-a
    从这个角度来看,儿子不应该继承父亲,儿子和父亲是has-a的关系!
    如果把儿子和父亲都抽象成类,这两个类都应该继承 人 这个类,
    然后父亲-->儿子是:一对多关联
    儿子-->父亲是:一对一关联
    (补充一下:聚合关系,合成关系都是强关联关系,依赖关系是单向的关联关系!)
      

  14.   

    java 是单继承但可以实现多个接口.net也是这样的