is-a表示的是属于得关系。比如兔子属于一种动物(继承关系)。has-a表示组合,包含关系。比如兔子包含有腿,头等组件;就不能说兔子腿是属于一种兔子(不能说是继承关系)假设有两个类:Computer和Employee。明显地,这两个类之间不存在"is a"的关系,即Employee不是计算机,它们之间没有继承关系的必要。因此不可能产生代码重用性。但这两个类之间是"has a"关系,即是支持的关系。例如,Employee"has a"Computer。明显地是一种支持关系。这种支持关系落实到代码中,就是在Employee中创建Computer的对象,调用其方法,到达完成某种运算和操作的目的。Employee和Manager 类存在的则是"is a"关系,即Manager是Employee。它们之间存在共性,或者共同的属性。Manager是Employee的具体化;Employee是Manager的概括和抽象。概括性和抽象性的类,如Employee,在继承中则定义为超类。具体或代表对象特性的类,如Manager,则定义为子类。如果这是一个用来计算雇员工资的程序,那么在超类Employee中,我们应当包括所有子类都应该具有的、与计算工资有关的数据,例如name、employeeID、jobTitle、seniority、baseSalary以及用来计算基本工资部分的方法,如baseSalary()等。在Manager这个子类中,我们不仅继承Employee的所有数据和方法,还增加针对Manager的新的数据,如是否董事会成员boardMember、职务补贴merit等,因为除基本工资的计算之外,这些都影响到具有经理职务雇员的收入。对两个类之间"is a"或是"has a"关系的分析,有助于我们确定它们之间是否存在继承关系,避免设计上的错误,因而达到提高代码重用性的目的
参考:http://hi.baidu.com/282535629/blog/item/023f4ec36a15105fb319a85d.html

解决方案 »

  1.   

    is a 表示继承
    has a 表示 组合楼主可以找一本关于 面向对象的书看看
      

  2.   

    thinking in java讲得清楚
      

  3.   

      可以参考《Thinking in java》 第5-8页很详细的描述了这两个概念
      

  4.   

    is   a指子类和基类的关系  
      如:  
      class   动物{  
      ..  
      }  
      clsss   狗   extends   动物   {  
      ...  
      }  
       
      狗   小白=new   狗();//小白‘is   a’狗;  
       
      'has   a'说明从属关系;  
      class   人{  
          public   狗   小白;  
      ...  
      }  
      人   浪人=new   人();  
      浪人.小白=new   狗();//浪人‘has   a’狗(小白);
      

  5.   

     从编程思想 上面是这样说的
      is-a 是完整的继承,也就是子类和父类完全一样
      has-a 是子类继承父类,并进行了扩展。
      

  6.   

    楼猪 is a 猪
    楼猪 has a 鼻子