如何在Java中设计以下结构?
我有一个名为如何在Java中设计以下结构?,java,Java,我有一个名为SHAPE的界面CIRCLE和RECTANGLE是实现此接口的两个类。现在我必须编写一个类(我可以选择只编写一个类)CIRCULARRECTANGLE,它将扩展CIRCLE和RECTANGLE的属性。如何在Java中执行此操作?您不能直接执行此操作。Java类始终只能扩展单个类 您可以使用委托来获得类似的效果。您的CircularRectangle(不管它代表什么!)可以引用圆和矩形对象,并将它们的属性“呈现”为自己的属性。由于java不允许多重继承,这是不可能的。不能让一个类扩展多
SHAPE
的界面CIRCLE
和RECTANGLE
是实现此接口的两个类。现在我必须编写一个类(我可以选择只编写一个类)CIRCULARRECTANGLE
,它将扩展CIRCLE
和RECTANGLE
的属性。如何在Java中执行此操作?您不能直接执行此操作。Java类始终只能扩展单个类
您可以使用委托来获得类似的效果。您的
CircularRectangle
(不管它代表什么!)可以引用圆和矩形对象,并将它们的属性“呈现”为自己的属性。由于java不允许多重继承,这是不可能的。不能让一个类扩展多个超类。
尝试使用组合而不是继承。Java不允许多重继承,也许您可以使用组合:
圆形矩形
实现形状
circularctangle
还包含CIRCLE
和RECTANGLE
的一个实例。然后根据逻辑使用这两个实例实现circularctangle
的方法。由于Java一次扩展一个类,因此需要创建符合条件的抽象类
例如:
public abstract class AbstractRectangle extends Rectangle {
public abstract class AbstractCircularRectangle extends AbstractRectangle {
public class CircularRectangle extends AbstractCircularRectangle {
更新:我的第一次尝试将永远不会成功,因此我的更新:
由于我第一次尝试从不扩展一个圆
,您需要保持对圆
或矩形
的引用,如下所示:
public class CircularRectangle extends Rectangle {
private Circle circle;
public CircularRectangle(Circle circle) {
this.circle = circle;
}
// Some logic:
}
构造函数的目的是保持对圆的引用。我将定义两个接口圆和矩形。您的类将实现这些接口。然后您可以定义扩展两个接口的接口循环矩形。
tridr类CircularRectangle应该有两个实例CirlInstance和rectangleInstance,以及调用实例中必要方法的委托调用。我们不能定义一个类,它是一个圆和一个矩形,只要这两个实体都是类
为了解决这样一种精神分裂症行为的问题,我们可以考虑使用适配器模式(假设,我们有一个圆和矩形界面和具体的实现)< /P>
公共类CircleImpl实现Circle{
//字段、构造函数、实现的圆方法
public Object adapt(ClassWell,这个问题很模糊。你不知道SHAPE
看起来怎么样like@Op:这就是为什么我没有进一步评论这是否有用的原因。我认为这里常用的方法是area()
:-)但是你没有扩展圆!?+1指出圆形矩形既不是圆形,也不是矩形,因此也不应该扩展,这是一个常见的继承误解。
public class CircleImpl implements Circle {
// fields, constructors, implemented Circle methods
public Object adapt(Class<? extends Shape> adaptee) {
if (adaptee == Rectangle.class) {
return new Rectangle() {
// implemented rectangle methods so that
// we have a squared circle
};
}
return null;
}
}