2016-07-07 89 views
0

这是Oracle Java教程网站的摘录。它不显示实际的.java文件,但我猜“Rectangle”是一个类。但是,如果您注意到,rectOne和rectTwo的参数传递(按值?)是不同的。 (一个有原点变量,两个没有)在Java中,传递值的变量数量是否可以小于对象类中变量的数量?

如果对象具有一定数量的参数,传递值的实际数量是否可以小于那个值?我假设它不能在默认情况下更多。

此外,我搜索的答案,但无法找到。

// 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); 
+1

看起来像Rectangle类指定了多个构造函数。查看其文档 –

+0

构造函数可以被重载,因此您可以拥有多个接受不同数量和类型参数的构造函数。 Java不允许参数的默认值,与其他语言相反,所以必须为每个需要的调用构造一个构造函数。 – Jack

+0

不太确定你的要求,但该示例显示了一个类“Rectangle”被实例化了两次(2个对象 - rectOne,rectTwo),每个构造函数使用不同的构造函数(假设每个都是有效的)。第二个构造函数rectTwo可以假定“origin”(Point对象)的默认值,如果值未在构造函数中传递。 –

回答

12

一种对象没有参数 - 方法或构造函数。在这种情况下,基本上有两个超载的构造函数。例如:

public Rectangle(Point origin, int width, int height) 
{ 
    this.origin = origin; 
    this.width = width; 
    this.height = height; 
} 

public Rectangle(int width, int height) 
{ 
    this(Point.ZERO, width, height); 
} 

在参数表达式为一个单一的过载可以改变的数量是可变参数的唯一时间:

public void foo(String... bar) 
{ 
    ... 
} 

foo("x"); // Equivalent to foo(new String[] { "x" }) 
foo("x", "y"); // Equivalent to foo(new String[] { "x", "y" }) 
foo("x", "y", "z"); // Equivalent to foo(new String[] { "x", "y", "z" }) 
+0

实际上,可变参数构造函数的参数数量不会改变,您只需隐藏数组的构造。 – Jack

+1

@Jack:不,*参数*的数量发生了变化。例如,在表达式foo(“x”,“y”,“z”)中有三个参数。当然,编译器会将它转换为单个数组传递给方法,但方法调用表达式仍然有三个参数。 –

+0

好的,我知道重载的构造函数。所以你说在这种情况下,有两个构造函数,而不只是一个。这对我来说很有意义。如果只是一个,我不确定这些价值是如何传递下来的。 –

1

这是从类题目的练习。我也读过。您可以按照教程中的说明创建自己的课程。在这里你有2个具有不同签名的类Rectangle1Class的构造函数。一个接受三个参数,另一个接受两个参数。尝试一下,它会工作。你必须创建你的类和方法来使其工作。例如:

public Rectangle1Class(PointClass cOrigin, int cWidth, int cHeight){ 
    origin = cOrigin; 
    width = cWidth; 
    height = cHeight; 
} 

public Rectangle1Class(int cWidth, int cHeight){ 
    width = cWidth; 
    height = cHeight; 
} 
+0

有趣的是,在我在这个网站上得到答案之后,我在那个解释了一切大声笑的课程部分之后去了几页。 –

+0

是的。这也发生在我身上,但在阅读那一节之前,我意识到我也可以创建自己的课程,所以我决定给它一个镜头,它的工作。阅读大量内容并练习阅读内容。这是学习的最佳方式。 – programmer95

0

矩形是一个类,它有2个构造函数。 一个构造函数需要3个参数,另一个需要2个。

在初始化对象时,您必须确保您传递了类的构造函数中所需的参数个数。