2012-04-12 2 views
0

Когда я пытаюсь скомпилировать это, он говорит: «Не удается найти конструктор символов Armor (int, int, int, java.lang.String)». Однако, когда я изменяю Armor (тупой, проколотый, вырезанный, имя) до Armor(), он отлично работает. Мне не разрешено перегружать конструкторы, если я использую несколько классов в одном файле (здесь у меня есть сопротивление класса и класс Armor в одном файле). Для меня абсолютно необходимо разместить их в одном файле, потому что я практикую это для соревнований, где вы не можете отправить более 1 файла.Как перегружать конструкторы при использовании нескольких классов в одном файле

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, то это уже не конструктор, а метод.

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