用Java实现多重分类
有没有一种方法可以在Java中实现多重分类?例如,以这个UML图为例-用Java实现多重分类,java,oop,uml,Java,Oop,Uml,有没有一种方法可以在Java中实现多重分类?例如,以这个UML图为例- 如何实现GrainCrop类?Java不支持类上的多重继承,只有接口可以从多个接口继承。所以我要做的是,所讨论的类GrainCrop实现了来自另外两个类的接口。然后GrainCrop聚合另外两个类并委托给“内部”对象。如果需要做额外的工作,那么也可以修饰GrainCrop中的调用。例如 public void methodFromClassCrop() { System.out.println("Stuff bef
如何实现
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扩展这两个类。您只能扩展一个类,但可以扩展任意多个接口。看看这个例子:是的,确实以前有人问过这个问题。谢谢你指出这一点。看看这个例子:是的,这个问题以前确实被问过。谢谢你指出这一点。