2012-12-20 1 views
0

고려 -arg가있는 생성자가 기본 생성자를 정의 해제하는 이유는 무엇입니까?

public class Class_A { 

    public void func() {...} 

    public void func(int a){...} 

을 세 -

Class_A a = new Class_A(); // legal 
a.func(); // legal 
a.func(1); // legal 

그러나 public Class_A (int a){...} 같은이 Class_A에 추가 인수, 수해진다 기본 생성자생성자 후 -

Class_A a = new Class_A(); // The constructor Class_A() is undefined 

그 나는 public Class_A() {/*Do Nothing*/}Class_A에 넣도록 강요합니다.

각 클래스 기본 생성자, 왜하지 기본 생성자 및 인수생성자 모두가 함께 func()func(int a)이 단지 같은 존재할 수 않습니다 가지고 있기 때문에

?

답변

2

이 경우에 당신은 당신이 생성자를 작성하는 경우, 컴파일러는 당신을위한 기본 생성자를 작성하지 않기 때문에 기본 생성자에게

2

를 정의 다시 할 필요가 자신의 생성자를 정의하지 않는 한이 기본 생성자가 있습니다. 명시 적으로 작성해야합니다. JLS에서

: 클래스가 생성자 선언, 공식적인 매개 변수 다음 기본 생성자를 포함하지 않고 절 가 암시 적으로 선언되어 발생하는 경우

.

1

그 반대의 경우입니다.

생성자가없는 경우 기본적으로 인수가없는 인수를 얻습니다.

0

"기본 생성자"라는 이름은 사용자가 직접 제공하지 않을 때 제공된다는 것을 의미합니다. 직접 생성자를 제공하면 컴파일러는 기본 생성자를 생성하지 않습니다.

기본 생성자와 인수가없는 생성자를 혼동하지 않도록주의하십시오. 이들은 완전히 다른 두 가지입니다.

관련 문제