2016-07-07 31 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個。

在初始化對象時,您必須確保您傳遞了類的構造函數中所需的參數個數。