如何决定使用IS A还是HAS A Relation

Paw*_*wan 9 oop

public class B {

    public String getMe()
    {
        return "Some";
    }
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个上面的类,我们应该通过哪些参数决定使用什么?是一个或有一个关系?

有个

public class A {



    public static void main(String args[])
    {
        B b = new B();
        System.out.println(b.getMe());
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

public class A  extends B
{


    public static void main(String args[])
    {
        A b = new A();
        System.out.println(b.getMe());
    }
}
Run Code Online (Sandbox Code Playgroud)

Yoc*_*mer 23

取决于逻辑关系.它只需要有意义.

例:

让我们说你有动物课.
所以你有这些课程:动物,狗,猫,豹,毛皮,脚

猫与狗是一种动物.
是一只猫.
动物毛皮,脚.

简而言之:

IS关系意味着您继承并扩展基类的功能.
HAS一个关系意味着该类正在使用另一个类,因此它将它作为成员.


M.S*_*eer 17

有四种类型的关系可能:

  • 泛化(IS A):使用类似于上面的继承实现.当A类具有B的所有相同功能并且您想要添加更多功能时使用它.因此,您只需扩展B并添加新功能.
  • 聚合(HAS A):这种关系比泛化有点弱.当A的对象拥有B的对象或由B的对象组成时(可以是其他类的其他对象),可以使用此关系.第一种类型称为共享聚合,第二种称为组合.在聚合和组合中,通常有一个对象控制另一个对象的生命(它实例化它并在需要时销毁它).
  • 关联:在关联中,这些类只是简单地了解彼此,因此它比聚合弱.物体不会控制彼此的生命.
  • 用法:它是两个类中最弱的关系,它意味着一个类可能在方法参数中显示为一个类型,或者在代码内部使用.

    在你的例子中,如果A有一个B类型的字段,那么它应该是聚合(HAS A).但是如果它只是在内部创建了要在代码中使用的B的实例,并且当范围结束时该对象从内存中处理,则它既不是IS A也不是A.它只是一种使用关系.

  • 这是一个比被接受的答案更强的答案. (3认同)