Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中设计以下结构?_Java - Fatal编程技术网

如何在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;
 }
}