2013-04-17 4 views
2

기본적으로 책에서 Java 연습을하고 있었는데이 소스 코드는 연습 문제에 대한 대답입니다. 그러나 eclipse는 아래에서 세 번째 줄에 "PhoneNumber() 생성자가 정의되지 않았습니다."오류가 있음을 알립니다. 그러나 내가 알기에, 특정 생성자가 올바르게 정의되었으므로 문제가 무엇입니까? 당신의 오류가 말하는Java 생성자가 정의되지 않았습니다.

public class PhoneNumber { 
    // Only the relevant source codes are posted here. 
    // I removed other bits cause I'm sure they are not responsible for the 
    // error 

    private char[] country; 
    private char[] area; 
    private char[] subscriber; 

    public PhoneNumber(final String country, final String area, final String subscriber) { 
     this.country = new char[country.length()]; 
     country.getChars(0, country.length(), this.country, 0); 
     this.area = new char[area.length()]; 
     area.getChars(0, area.length(), this.area, 0); 
     this.subscriber = new char[subscriber.length()]; 
     subscriber.getChars(0, subscriber.length(), this.subscriber, 0); 
     checkCorrectness(); 
    } 

    private void runTest() { 
     // method body 
    } 

    public static void main(final String[] args) { 
     (new PhoneNumber()).runTest(); // error here saying : 
             // "The constructor PhoneNumber() is undefined" 
    } 
} 

답변

6

Eclipse가 정확한지. 코드에서 인수가없는 생성자를 정의하지 않습니다. 이는 main 메서드 내에서 new PhoneNumber()으로 호출하는 것입니다.

public PhoneNumber (final String country, final String area, final String subscriber) 

소위 기본 생성자, 인수없이 하나, 당신이 다른 생성자를 지정하지 않으면 자동으로 생성됩니다

당신은 하나의 생성자를 보유하고 있습니다. 3 개의 매개 변수로 하나를 지정하므로 기본 생성자가 없습니다.

이 해결하는 두 가지 방법이 있습니다 :

  1. 가 인수 없음의 생성자를 선언을; 또는
  2. 이미 생성자를 사용하십시오.

첫 번째 옵션을 구현하려면 다음과 같이 뭔가를 할 수 : 이것은 단순히 당신이 이미 매개 변수의 기본 세트가 생성자를 호출하는 인수 없음의 생성자를 만들 것

class PhoneNumber { 
    ... 
    public PhoneNumber() { 
    this("no country", "no area", "no subscriber"); 
    } 
} 

. 원하는 것일 수도 있고 아닐 수도 있습니다.

두 번째 옵션을 구현하려면 main 메서드를 변경하십시오. 같은 대신

(new PhoneNumber()).runTest(); 

사용 무언가 : 당신이 다른 생성자를 정의하지 않는 경우

(new PhoneNumber("the country", "the area", "the subscriber")).runTest(); 
+0

설명 및 솔루션을 제공해 주셔서 감사합니다. 고마워. – Kyle

0

는 더

PhoneNumber() 

생성자 (PARAMS없이) 정의되지 않은 것입니다. 기본적으로 이것은 다른 생성자를 선언하지 않으면 Java에서 사용할 수있는 생성자입니다. 하지만이를 구현하여 우선 적용합니다.

PhoneNumber (final String country, final String area, final String subscriber) 
1

기본값은 (인수를) 생성자 만 당신을 위해 자동으로 정의되지 않습니다.

관련 문제