2015-07-20 3 views
-1

Почему:
Если класс не предоставляет constructors то default constructor(constructor without parameter) дается компилятором во время компиляции, но если класс содержит parameterized constructors то конструктор по умолчанию не предусмотрен компилятором.конструктора по умолчанию не вызывается

Я комментирую код, указанный ниже. Он дает ошибку компиляции.

Код:

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(); 
    } 
} 

Console Ошибка:

enter image description here

Когда я вызван только parameterized constructor. Его работоспособность. Но если вы хотите вызвать default constructor с parameterized constructor. Компилятор дает ошибку компиляции, как показано на рисунке.

Любая немедленная помощь будет очень заметной. Спасибо

+3

Ум, поэтому предоставляйте свой собственный конструктор без параметров, это так просто. Компилятор * только * предоставляет конструктор по умолчанию, если вы не предоставили его явно. –

+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()] для вашего класса. Поэтому вы не можете позвонить общественности ConstructorTest() по строке 28.

+0

Я согласен с вы, я хочу знать, почему это происходит? если класс содержит параметризованные конструкторы, то почему конструктор по умолчанию не предоставляется компилятором? –

+0

@Rohit Jindal, вы можете увидеть ссылку - http://stackoverflow.com/questions/16046200/why-java-doesnt-provide-default-constructor-if-class-has-parametrized-construc – Razib

1

Я не знаю, почему вы задаете этот вопрос. Вы сами сказали: «Но если класс содержит параметризованные конструкторы, то конструктор по умолчанию не предоставляется компилятором». ... так что это объясняет!

+0

Я согласен с вами, Я хочу знать, почему это происходит? если класс содержит параметризованные конструкторы, то почему конструктор по умолчанию не предоставляется компилятором? –

Смежные вопросы