最近看到继承。
两个类 Pet类Dog类,不是所有Dog(比如狼狗、警犬)都是Pet类。
不是所有Pet(比如猫啊,鱼啊)都是Dog最后发现Pet has a dog ,Dog has a Pet.好了现在要设计Dog类和Pet类要怎么设计?

解决方案 »

  1.   


    Jaava里面的类和你现在所讲的类是不一样的。类是对象的模板,也就是说你写了一个Dog类,所有同过Dog类实例化出来的对象都是dog对象,而你上面所说的Dog类是不一样的。
      

  2.   


    楼主,你要知道,java类就是对同一事物的共同特征的抽象(同一类:比如是所有狗类的动物【并不是你上面说的,狼狗、警犬】)。
      

  3.   

    没有互相继承的类,你可以建立一个animal类(或者接口),然后dog和pet分别继承animal. java 中类一般都是树型的,你可以参看JDK
      

  4.   

    小泽玛利亚我的意思是狗类不能继承宠物类,因为不是所有狗都是宠物(比如狼狗)
    同样宠物类也不能继承狗类,因为不是所有宠物都是狗(比如宠物猫,鱼)所以对于狗类和宠物类不能用继承然后我发现他们之间的关系是相互包含的就是说狗里面有宠物狗,宠物里面有狗
    我想知道用java怎样很好的同时设计出这两个类PS:我知道JAVA是单根继承的
      

  5.   

    具体问题要具体分析,知识要灵活运用。
    软件建模并不是要无谓地去模拟现实世界,而是用来解决实际问题的。
    在一个所有Dog都是Pet的问题空间里(比如一个宠物商店里),可以说A Dog "IS-A" a Pet.
    在另外的问题空间里,比如动物科普系统里,Dog不一定是Pet,这时可以把Pet设计为接口,即A Dog "CAN-BE" a Pet.
    但是楼主对"HAS-A"的关系理解是错的,"HAS A"体现的是一种组合(Composition)关系,这里没有"HAS-A"关系。
      

  6.   

    就是Dog类的某一个子类实现Pettable接口

    Pet类的某一个子类实现Doggable接口
      

  7.   

    我觉得要看你在Pet和Dog里面完成什么东西。可以考虑抽象接口Petable和Dogable (举个例子),里面声明必须的方法。
    另外你定义的是宠物类,是不应该存在包含狗这种说法,应该是某些宠物类会具有【是狗】这个属性
      

  8.   

    LZ的意思岂不是说宠物狗这个类要继承狗和宠物两个象类?在java中类是不支持多继承的,只能是把狗和宠物写成接口,宠物狗这个类可以同时实现狗和宠物两个接口
      

  9.   

    LZ的意思岂不是说宠物狗这个类要继承狗和宠物两个类?在java中类是不支持多继承的,所以一个类不能继承两个类;只能是把狗和宠物写成接口,宠物狗类同时实现狗和宠物两个接口
      

  10.   


    我觉得楼主想表达的不是多重继承的问题,多重继承用interface就可以解决了,
      

  11.   

    为什么要互相继承呢;把Dog和Pet是设计成两个接口,宠物狗同时实现这两个接口就足够满足LZ的需求了,压根用不着继承
      

  12.   

    建议你参考参考参考《JAVA设计模式》
      

  13.   

    interface Dog
    interface Pet