【问题标题】:How to create a constructor of an object from a extended class that contains as arguments two initial object? [duplicate]如何从包含两个初始对象作为参数的扩展类创建对象的构造函数? [复制]
【发布时间】:2012-02-01 07:59:44
【问题描述】:

我是 Java 新手,遇到一个简单的问题:

我有以下类点:

public class Point {

    private int yAxis;
    private int xAxis;

    public Point (int x, int y)
    {
        xAxis = x;
        yAxis = y;
    }
}

我创建了一个扩展类 Point 的新类。我希望我的新类将两个对象 Point 作为参数。我编写了以下代码,但收到错误“隐式超级构造函数 MyPoint() 未定义。必须显式调用另一个构造函数”。我该如何解决这个问题?

提前致谢!

public class Rectangle extends Point {

    private int length1;
    private int height1;

    public Rectangle(int x, int y, int l, int h) {
        super(x, y);
        l = length1;
        h = height1;
    }

    public Rectangle(Point topLeft, Point bottonRight) {


    }
}

【问题讨论】:

  • 仅供参考:将字段值分配给构造函数参数值是没有意义的。例如,您写:l = length1.
  • 另外...问你问题的更清楚的方法是“我如何创建一个依赖于其超类的子类?”

标签: java object extends


【解决方案1】:

其他人提到你不应该使用继承。我完全同意。但我发现 Effective Java 是此类问题的一个很好的参考,我认为它值得自己回答。请参阅Effective Java Item 16: Favor composition over inheritance 进行更深入的讨论。

【讨论】:

  • 我也非常推荐阅读整本书!
【解决方案2】:

您不应该仅仅因为Rectangle 类提到Points 而使用extends Pointextends 关键字用于声明 is-a 关系。问问自己一个矩形是一个点吗?

如果您想说“此类将使用 Point-class”,您可能应该只使用 import Point 类。

(您可以通过删除 extends Point 来修复错误。)

【讨论】:

  • 我可以在不删除扩展点的情况下解决问题吗?
  • 是的(但这会很愚蠢:) 因为 Rectangle 然后 Point 你需要为 Point-constructor 提供参数(@987654331 @ 和 y)。您可以通过在第二个 Rectangle 构造函数的顶部添加例如 super(0, 0) 来做到这一点。
  • @voimak: 你也可以使用topLeft Point: super(topLeft.getX(), topLeft.getY()) 的 x 和 y 属性调用超级构造函数,但这只是在你真的希望能够将矩形视为一点。
  • bottomRight Point 怎么样,我必须做同样的 super(bottomRight.getX(), bottomRight.getY())?谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 2012-08-14
  • 2019-12-21
  • 1970-01-01
  • 2013-10-30
  • 1970-01-01
  • 2012-01-01
相关资源
最近更新 更多