用Java实现多重分类

用Java实现多重分类,java,oop,uml,Java,Oop,Uml,有没有一种方法可以在Java中实现多重分类?例如,以这个UML图为例- 如何实现GrainCrop类?Java不支持类上的多重继承,只有接口可以从多个接口继承。所以我要做的是,所讨论的类GrainCrop实现了来自另外两个类的接口。然后GrainCrop聚合另外两个类并委托给“内部”对象。如果需要做额外的工作,那么也可以修饰GrainCrop中的调用。例如 public void methodFromClassCrop() { System.out.println("Stuff bef

有没有一种方法可以在Java中实现多重分类?例如,以这个UML图为例-


如何实现
GrainCrop
类?

Java不支持类上的多重继承,只有接口可以从多个接口继承。所以我要做的是,所讨论的类
GrainCrop
实现了来自另外两个类的接口。然后
GrainCrop
聚合另外两个类并委托给“内部”对象。如果需要做额外的工作,那么也可以修饰
GrainCrop
中的调用。例如

public void methodFromClassCrop() {
    System.out.println("Stuff before call");
    oneOfTheObjects.methodFromClassCrop();
    System.out.println("Stuff after call");
}

当然,您只能为其中一个类引入接口并从另一个类继承。这取决于您的新类是否在某种意义上扩展了其他类中的一个:引入新的行为、算法、使用其他数据的数据,或者您是否只是对它们进行“操作”(本例中为聚合)。

Java不支持类上的多继承,只有接口可以从多个接口继承。所以我要做的是,所讨论的类
GrainCrop
实现了来自另外两个类的接口。然后
GrainCrop
聚合另外两个类并委托给“内部”对象。如果需要做额外的工作,那么也可以修饰
GrainCrop
中的调用。例如

public void methodFromClassCrop() {
    System.out.println("Stuff before call");
    oneOfTheObjects.methodFromClassCrop();
    System.out.println("Stuff after call");
}

当然,您只能为其中一个类引入接口并从另一个类继承。这取决于您的新类是否在某种意义上扩展了其他类中的一个:引入新的行为、算法、使用其他数据的数据,或者您是否只是对它们进行“操作”(在本例中是聚合)。

接口。
Crop
FoodItem
中的一个或两个将是由
GrainCrop
实现的接口。因此,要么:

  • GrainCrop
    是一种
    Crop
    (并继承其行为)并展示了
    FoodItem
    的行为。在这种情况下,
    Crop
    是一个基类(可能是抽象的),而
    FoodItem
    是一个接口
  • GrainCrop
    是一个
    FoodItem
    (并继承其行为)并显示
    Crop
    的行为。在这种情况下,
    FoodItem
    是一个基类(可能是抽象的),而
    Crop
    是一个接口
  • GrainCrop
    展示了
    FoodItem
    Crop
    的行为。在这种情况下,
    FoodItem
    Crop
    都是接口
  • 在单一继承环境中,您需要特别注意识别“是”什么东西,以及它表现出什么行为。(这就是为什么接口通常由其行为(如
    Eatable
    )来描述,而不是由其结构(如
    FoodItem
    )来描述的原因之一。这使建模更加清晰。)


    对于简化来说,通常是一种方便的方法,将基类视为“是”,将接口视为“做”。对象只能是一件事,但它可以做很多事情。

    接口。
    Crop
    FoodItem
    中的一个或两个将是由
    GrainCrop
    实现的接口。因此,要么:

  • GrainCrop
    是一种
    Crop
    (并继承其行为)并展示了
    FoodItem
    的行为。在这种情况下,
    Crop
    是一个基类(可能是抽象的),而
    FoodItem
    是一个接口
  • GrainCrop
    是一个
    FoodItem
    (并继承其行为)并显示
    Crop
    的行为。在这种情况下,
    FoodItem
    是一个基类(可能是抽象的),而
    Crop
    是一个接口
  • GrainCrop
    展示了
    FoodItem
    Crop
    的行为。在这种情况下,
    FoodItem
    Crop
    都是接口
  • 在单一继承环境中,您需要特别注意识别“是”什么东西,以及它表现出什么行为。(这就是为什么接口通常由其行为(如
    Eatable
    )来描述,而不是由其结构(如
    FoodItem
    )来描述的原因之一。这使建模更加清晰。)


    作为一种通常方便的简化方法,将基类视为“是”,将接口视为“做”。对象只能是一件事,但它可以做很多事情。

    好吧,鉴于FeedItem似乎没有任何实现,我会将其设为接口,将Crop设为类(可能是抽象的),并让GrainCrop扩展它们。您只能扩展一个类,但可以扩展任意多个接口。

    好吧,鉴于FeedItem似乎没有任何实现,我会将其作为一个接口,将Crop作为一个类(可能是抽象的),并让GrainCrop扩展这两个类。您只能扩展一个类,但可以扩展任意多个接口。

    看看这个例子:是的,确实以前有人问过这个问题。谢谢你指出这一点。看看这个例子:是的,这个问题以前确实被问过。谢谢你指出这一点。