2015-07-20 261 views
-1

爲什麼:
如果一個類不提供任何constructors然後default constructor(constructor without parameter)由編譯器在編譯時給出,但如果一個類包含​​那麼默認的構造函數不是由編譯器提供。默認構造函數不調用

我在編譯下面的代碼。它給編譯錯誤。

代碼:

class ConstructorTest 
{ 
    // attributes 
    private int l,b; 

    // behaviour 
    public void display() 
    { 
     System.out.println("length="+l); 
     System.out.println("breadth="+b); 
    } 
    public int area() 
    { 
     return l*b; 
    } 

    // initialization 
    public ConstructorTest(int x,int y) // Parameterized Constructor 
    { 
     l=x; 
     b=y; 
    } 

    //main method 
    public static void main(String arr[]) 
    { 
     ConstructorTest r = new ConstructorTest(5,10); 
     ConstructorTest s = new ConstructorTest(); 
     s.display(); 
     r.display(); 
     r.area(); 
    } 
} 

控制檯錯誤:

enter image description here

當我只調用了parameterized constructor。它的工作很好,但是當想用parameterized constructor調用default constructor。編譯器給出編譯錯誤,如圖所示。

任何即時幫助將非常可觀。謝謝

+3

嗯,所以提供你自己的無參數構造函數 - 就這麼簡單。如果沒有明確提供,編譯器* only *提供了一個默認構造函數。 –

+0

這是一個(非常)精確重複的http://stackoverflow.com/questions/11792207/why-does-the-default-parameterless-constructor-go-away-when-you-create-one-with - 那應該有你想要的信息 –

+0

@JonSkeet,我完全同意你的看法。我只想知道爲什麼? –

回答

5

您的問題的答案在您提供的段落中。

但如果一個類包含參構造函數,那麼默認的構造函數不是由編譯器提供

您創建了一個參數的構造函數,因此沒有提供默認的非構造函數和theremore必須親自使其

+0

我同意你的意見,我想知道爲什麼會發生這種情況?如果一個類包含參數化構造函數,那麼爲什麼默認構造函數不是由編譯器提供的? –

+0

查看鏈接@Razib發佈(http://programmers.stackexchange.com/questions/257938/why-is-no-default-constructor-generated-if-you-define-an-explicit-constructor) –

1

如果你提供了一個構造函數,那麼默認構造函數就不會被添加到你的類中。你必須自己定義它。

1

您正在編譯使用javac ConstructorTest.java 而由於聲明的參數的構造函數得到的錯誤 - public ConstructorTest(int x,int y)。因此,編譯器不會爲您的類提供任何默認構造函數[public ConstructorTest()]。所以你不能在第28行叫公共ConstructorTest()

+0

我同意你,我想知道爲什麼會發生這種情況?如果一個類包含參數化構造函數,那麼爲什麼默認構造函數不是由編譯器提供的? –

+0

@Rohit Jindal,你可能會看到鏈接 - http://stackoverflow.com/questions/16046200/why-java-doesnt-provide-default-constructor-if-class-has-parametrized-construc – Razib

1

我不知道你爲什麼問這個問題。你自己說過「但是如果一個類包含參數化構造函數,那麼默認構造函數不是由編譯器提供的。」......這樣解釋!

+0

我同意你的看法,我想知道爲什麼會發生這種情況?如果一個類包含參數化構造函數,那麼爲什麼默認構造函數不是由編譯器提供的? –