我们可以通过在Java中组合构造函数来创建类的实例吗?

时间:2014-10-01 06:55:17

标签: java

请查看下面代码的片段,我在阅读java tutorial on creating objects时偶然发现了这些代码。

    // Declare and create a point object and two rectangle objects.
    Point originOne = new Point(23, 94);
    Rectangle rectOne = new Rectangle(originOne, 100, 200);
    Rectangle rectTwo = new Rectangle(50, 100);

通过传递rectOne类的对象(即矩形的PointoriginOne以及width来创建height对象。如果您查看Rectangledocumentation,您会发现文档中没有这样的构造函数可以接受三个参数(即点,宽度和高度)。但是,有一些单独的构造函数,其中一个将类Point作为参数

Rectangle(Point p)

和另一个将矩形的宽度和高度作为参数

Rectangle(int width, int height)

我想知道你可以组合构造函数,就像我在上面从教程中分享的代码片段一样吗?

5 个答案:

答案 0 :(得分:1)

组合构造函数?在Java中没有这样的东西。你可以转换

Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);

Rectangle rectOne = new Rectangle(new Point(23, 94), 100, 200);//not a Combining.

Rectangle已经有一个接受Point的构造函数。

答案 1 :(得分:1)

不,您不能按照建议的方式组合两个构造函数。 Rectangle确实有一个3参数构造函数:

public Rectangle(Point p, int w, int h) {
    origin = p;
    width = w;
    height = h;
}

您在文档链接中引用的Rectangle类与教程中使用的类不相关。

您可以做的是从另一个构造函数调用一个构造函数。例如,具有3个参数的构造函数可以先调用只有前两个参数的构造函数,然后初始化第3个参数。

例如,Rectangle构造函数可以重写为:

public Rectangle(Point p, int w, int h) {
    this (p);
    width = w;
    height = h;
}

public Rectangle(Point p, int w, int h) {
    this (w,h);
    origin = p;
}

答案 2 :(得分:1)

在示例中,您不使用java.awt.Rectangle。在本教程中,他们使用自己的Rectangle类实现,它具有这样的构造函数。

答案 3 :(得分:0)

不,你不能。您只能使用已经定义的构造函数。最好的方法是使用最适合您的用例的构造函数,并使用setter方法来分配您的其他属性。

Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne);
rectOne.setSize(100, 200);

Rectangle rectOne = new Rectangle(originOne.getX(), originOne.getY(), 100, 200);

Dimension dimension = new Dimension(100, 200);
Rectangle rectOne = new Rectangle(originOne, dimension);

这取决于你:)

答案 4 :(得分:0)

Rectangle为7个构造函数提供了intPointDimension类型的不同参数。 不幸的是,没有建设者将intPointDimension混合在一起。

相反,您有以下选择:

  1. 仅传递整数(通过从点开始)

    Point originOne = new Point(23, 94);
    Rectangle rectOne = new Rectangle(originOne.x, originOne.y, 100, 200);
    
  2. 传递维度作为第二个参数

    Point originOne = new Point(23, 94);
    Dimension sizeOne = new Dimension(100, 200);
    Rectangle rectOne = new Rectangle(originOne, sizeOne);
    
  3. 对于没有原点的矩形,您可以使用

        Dimension sizeTwo = new Dimension(50, 100);
        Rectangle rectTwo = new Rectangle(sizeTwo);
    

    通过这种方式,您甚至可以轻松地重复使用不同矩形的原点或大小。