作文中的物体?

时间:2017-05-30 09:18:53

标签: java oop object composition

作为初学者,我一直在学习构图和继承。我意识到在使用合成时,你不是创建对象而是创建合成。我在这里有点困惑。让我们说我们正在建造一个头部,两条腿和两条腿的人。

通常,我要做的是创建手臂腿和头部类,然后创建由这些人构建的人类对象。但是在构图中,你建立了一个与其他类相关联的人类?我哪里错了?

6 个答案:

答案 0 :(得分:4)

成分:

class Human {
  Head head;
  Arm leftArm, rightArm;
  Leg leftLeg, rightLeg;
}

如果在另一个类中使用对象(如Head),则可以创建合成。

继承:

class Woman extends Human {
}

答案 1 :(得分:3)

组成示例:考虑汽车和发动机的示例,该汽车和发动机非常特定于该汽车(意味着它不能用于任何其他汽车)。 Car和SpecificEngine类之间的这种关系称为组合。没有SpecialEngine类的对象,Car类的对象不能存在,而没有Car类,SpecificEngine的对象没有意义。简单来说,Car class只“拥有”SpecificEngine类。

聚合示例:现在考虑类Car和类Wheel。汽车需要Wheel对象才能运行。含义Car对象拥有Wheel对象但我们不能说没有Car Object对象没有意义。它可以很好地用于自行车,卡车或不同的汽车对象。

答案 2 :(得分:3)

确实,你错了。

组合通常被认为是继承的替代方法,但在这两种情况下,您都可以操作类的实例而不仅仅是组合案例中的类。

以您的示例为例,一个非常糟糕的继承示例是:

  • 一个TwoLegs类是两条腿。
  • 一个TwoArmsAndTwoLegs类(TwoLegs的子类),它是两条臂但也是两条腿。
  • 一个HeadAndTwoArmsAndTwoLegs类(TwoArmsAndTwoLegs的子类),它是一个头部但也有两条腿和两条腿。
  • 一个Human类(HeadAndTwoArmsAndTwoLegs的子类),它是一个人,但也是所有遗体。

它并不灵活,因为所有类的层次结构与其结构的定义本身密切相关。

这里,组合将拥有一个拥有5个字段的Human类:

  • Leg class的rightLeg字段
  • Leg class的leftLeg字段
  • Arm类的leftArm字段
  • Arm类的rightArm字段
  • Head类的head字段

答案 3 :(得分:2)

当Neo(来自Matrix)通过将Kung-Fu下载到他的大脑中来学习Kung-Fu时,它被称为组合(您为对象提供符合或“连接”其他不同对象的协议它)。但Neo不会有三位一体的眼睛颜色,因为它们没有相关性(它只能在Matrix中,而不是在现实生活中)。

如果Neo和Trinity有一个孩子,她就不会知道Kung-Fu(除非后来她明确地介绍了与Neo相同的下载),但仍然会有Trinity的眼睛。这是继承

答案 4 :(得分:1)

组成:由于引擎是汽车的一部分,它们之间的关系是组合。以下是它们在Java类之间的实现方式。

public class Car {
    //final will make sure engine is initialized
    private final Engine engine;  

    public Car(){
       engine  = new Engine();
    }
}

class Engine {
    private String type;
}

聚合:由于组织将Person作为员工,因此它们之间的关系是聚合。以下是它们在Java类

方面的外观
public class Organization {
    private List employees;
}

public class Person {
    private String name;   
}

答案 5 :(得分:0)

is-a relationship是一种继承,并且has-a Relationship是一种组合。

班级经理扩展员工{ } //这称为继承,因为所有Manager都是Employee。

班级经理扩展员工{ 团队团队=新团队();

}

这里经理有一个团队来管理,所以这是由组成。(有一个关系)

相关问题