2012-04-12 3 views
0

이 파일을 컴파일하려고하면 "Armor (int, int, int, int, java.lang.String) 심볼을 찾을 수 없습니다"라는 메시지가 표시됩니다. 그러나 Armor (무딘, 피어싱, 컷, 이름)를 Armor()로 변경하면 완벽하게 정상적으로 작동합니다. 단일 파일에서 여러 클래스를 사용하는 경우 생성자를 오버로드 할 수 없습니다 (클래스 저항 및 클래스 갑옷이 하나의 파일에 있음). 하나 이상의 파일을 제출할 수없는 대회에서 연습하기 때문에 반드시 같은 파일에 넣어야합니다.하나의 파일에서 여러 클래스를 사용하는 경우 생성자 오버로드 방법

public class resistance 
{ 
    public static void main (String [] args) 
    { 
     int blunt=4; 
     int pierce=2; 
     int cut=7; 
     String name="Helmet"; 
     Armor item = new Armor(blunt, pierce, cut, name); 
    } 
} 

class Armor 
{ 
int blunt; 
int pierce; 
int cut; 
String name; 

void Armor() 
{ 
    blunt=0; 
    pierce=0; 
    cut=0; 
    name=""; 
} 

void Armor(int a, int b, int c, String d) 
{ 
    blunt=a; 
    pierce=b; 
    cut=c; 
    name=d; 
} 
} 
+0

Java에서 파일 당 하나의 클래스 설정을 사용하는 것은 일반적으로 허용됩니다. 그것은이 관용구를 고수하기 위해 선명도와 미래의 디버깅을 크게 도와 줄 것입니다. –

답변

6

void Armor(...)은 클래스와 동일한 이름의 메소드입니다.
Armor(...)은 생성자입니다.

1

이들은 생성자가 아닙니다. 그들은 리턴 타입을 가지므로 메소드입니다. void를 제거하십시오.

IDE를 사용하는 경우 사용자에게주는 경고에주의하십시오. 예를 들어 eclipse는 "이 메소드에는 생성자 이름이 있습니다"라는 메시지가 표시되어 즉시 실수를 인식하는 데 도움이됩니다. 당신이 그것을 "과부하"하려면

3

, 당신은 명시 적으로이 생성자를 정의해야합니다 :

public Armor(int a,int b,int c,String d){ 
} 

당신의 갑옷 클래스. void과 같은 반환 형식의 메서드를 선언하면 더 이상 생성자가 아니라 메서드가됩니다.

관련 문제