2015-01-13 1 views
0

나는 간단한 게임을 개발 중입니다. Monster이라는 클래스를 생성하여 모든 몬스터의 기본 템플릿으로 사용했습니다.java - 생성자는 주어진 유형에 적용 할 수 없습니다

public class Area1Monsters extends Monster { 
    public static void main(String[] args) { 

     Monster rat1 = new Monster(1, "Claws", 3, "Fur", 9, "Fields", "Rat", 1); 

     System.out.println("Attack Power: " + rat1.attackPower); 
     System.out.println("Weaon Name: " + rat1.weaponName); 
     System.out.println("Armor Level: " + rat1.armorLevel); 
     System.out.println("Armor Name: " + rat1.armorName); 
     System.out.println("HP: " + rat1.life); 
     System.out.println("Starting Area: " + rat1.monsterClass); 
     System.out.println("Name: " + rat1.monsterName); 
     System.out.println("Monster Number: " + rat1.monsterNumber); 
    } 
} 

오류가 내가 제대로 각을 일치 한 생각 constuctor Monster in class Monster cannot be applied to given type; required: int, java.lang.String, int, java.lang.String...

를 말한다 : 여기

public class Monster { 
    public int attackPower; 
    public String weaponName; 
    public int armorLevel; 
    public String armorName; 
    public int life; 
    public String monsterClass; 
    public String monsterName; 
    public int monsterNumber; 

    public Monster(int attackPower, String weaponName, int armorLevel, String armorName, int life, String monsterClass, String monsterName, int monsterNumber) { 
     this.attackPower = attackPower; 
     this.weaponName = weaponName; 
     this.armorLevel = armorLevel; 
     this.armorName = armorName; 
     this.life = life; 
     this.monsterClass = monsterClass; 
     this.monsterName = monsterName; 
     this.monsterNumber = monsterNumber; 
    } 
} 

내가 생성자를 테스트하기 위해 함께 넣어 클래스입니다 : 여기에 Monster 클래스입니다 생성자에서 객체 생성의 응용 프로그램에 이르기까지 데이터 유형은 rat1이지만 분명히 누락되었습니다. 나는 그것이 분명하고 기본이라고 확신한다. 어떤 도움이라도 대단히 감사 할 것입니다.

+1

"etc"로 잘라내 기보다는 정확한 오류를 줄 수 있습니까? 팔목에서 나는 모든 것이 일치하는 것처럼 보이면 아마 하나의 파일을 컴파일했지만 다른 파일을 다시 컴파일하지 않았을 것입니다. –

+0

여기에 정확한 오류 : Monster 클래스의 Constuctor Monster는 주어진 유형에 적용 할 수 없습니다. 필수 : int, java.lang.String, int, java.lang.String, int, java.lang.STring, java.lang.String, int; 이것은 생성자의 특정 유형과 관련이 있다고 가정합니다. –

+1

질문에 편집하십시오. 또한, 당신이 당신의 메인 클래스에 대해'몬스터 (Monster) '를 확장한다는 사실에 근거하여 문제를 가질 것임을 주목하십시오. 'Monster'를 확장해서는 안되며,해야한다면 슈퍼 생성자를 적절히 호출해야합니다. –

답변

4

하위 클래스에 명시 적 생성자가 없으므로 컴파일러는 을 호출 할 수있는 기본 생성자를 생성합니다. 상위 생성자는 매개 변수가 없습니다. 매개 변수없는 생성자없이 클래스를 서브 클래스 화하려면, 가지고있는 수퍼 클래스 생성자를 호출하는 명시 적 생성자를 제공해야합니다.

또는 Area1Monsters에서 "extends"절을 제거하십시오. extends 키워드가없는

public class Area1Monsters 

:

+0

감사합니다. Patricia. 분명히 수퍼 클래스와 하위 클래스의 개념을 잘못 이해했습니다. 나는 몬스터가 슈퍼 클래스로 행동 할 것이라는 인상을 받고 있었고 Area1Monster는 슈퍼 클래스 몬스터의 하위 클래스 또는 하위 클래스로 행동했습니다. 이것은 틀린가? –

+0

수퍼 클래스/서브 클래스는 "is-a"관계와 함께 사용됩니다. 고블린 ** 몬스터이기 때문에 '고블린은 몬스터를 확장합니다.'라고 말할 수 있습니다. "is-a"와의 관계를 표현할 수 없다면 아마 하위 클래스가 아니어야합니다. – dcsohl

+0

맞아요.하지만 그에 따라, rat1은 괴물입니다. 그런데 왜 괴물을 연장시켜야하지 않습니까? –

5

는이 방법으로 Area1Monsters 선언을 변경해야합니다.

+1

왜 이렇게 많이 다운 voted되고 있는지 잘 모르겠다; 그것은 아마도 올바른 해결책 일 것입니다. 바로 전에 패트리샤의 대답에 비추어 보았을 때, 그것은 중복되어 있습니다. –

+0

흥미롭게도이 방법은 "확장"을 추가하기 전에 작동하는 솔루션이었습니다. 단순히 "확장"이 필요하다는 인상하에있었습니다. 명백하게. –

+1

실제로. 기본 생성자가 전혀 필요없는 유일한 이유는 테스트 클래스가 Monster 클래스를 상속하기 때문입니다. Monster 클래스는 Monster 클래스를 상속하지 않기 때문에 Monster 클래스를 상속하지 않아야합니다. – RealSkeptic

0

저는 이것이 상속과 관련이 있다고 생각합니다. 하위 클래스에는 암시 적 빈 생성자가 있습니다.

슈퍼 클래스에 빈 생성자를 정의하거나 Area1Monsters에 명시 적 생성자를 정의해야합니다. 명시 적 생성자는 (기본값 또는 null 값을 사용하여) 수퍼 클래스 생성자를 호출해야합니다.

관련 문제