无法通过Object Java RPG角色构建器访问类

时间:2017-09-29 01:59:25

标签: java oop object inheritance

我尝试使用继承创建一个小角色构建器。我有CreateCharacter CharacterRace然后是一个Dwarf类。我在CreateCharacter中创建了一个类型为CharacterRace的变量,在CharacterRace中创建了一个类型为Dwarf的变量。我在我的主方法演示中有一个CreateCharacter对象,它不让我调用Dwarf类中的方法来制作一个矮人角色。我想是不是要在characterRace中传递一个矮人对象?我只是不确定如何。继承了我的代码:(我的道歉有点长)

   package characterCreation;

public class CreateCharacter {
    private CharacterClass characterClass;
    private CharacterRace characterRace;
    private Name name;
    public CreateCharacter(String characterName,CharacterClass characterClass,CharacterRace characterRace) {
        this.name = new Name(characterName);
        this.characterClass = characterClass;
        this.characterRace = characterRace;
    }
    public CreateCharacter(){

    }
    public CharacterClass getCharacterClass() {
        return characterClass;
    }
    public void setCharacterClass(CharacterClass characterClass) {
        this.characterClass = characterClass;
    }
    public CharacterRace getCharacterRace() {
        return characterRace;
    }
    public void setCharacterRace(CharacterRace characterRace) {
        this.characterRace = characterRace;
    }
    public Name getName(){
        return name;
    }
    public void setName(Name name){
        this.name = name;
    }
    @Override
    public String toString() {
        return "CreateCharacter [name=" + name + ", characterRace=" + characterRace + ", characterClass="
                + characterClass + "]";
    }



}


    package characterCreation;

    public class CharacterRace {
        protected String raceName;
        protected double mana;
        protected double hp;
        private Dwarf dwarf;
        public CharacterRace(String raceName,double mana, double hp) {
            this.raceName = raceName;
            this.mana = mana;
            this.hp = hp;
        }   
        public CharacterRace(){

        }
        public String getRaceName() {
            return raceName;
        }

        public Dwarf getDwarf() {
            return dwarf;
        }

        public void setDwarf(Dwarf dwarf) {
            this.dwarf = dwarf;
        }
        public double getMana() {
            return mana;
        }

        public double getHp() {
            return hp;
        }

        @Override
        public String toString() {
            return "CharacterRace [dwarf=" + dwarf + "]";
        }

        }

    package characterCreation;

public class Dwarf extends CharacterRace {



    public Dwarf(String raceName,double mana, double hp) {
        super(raceName,mana,hp);

    }

    public double getMana() {
        mana = 5;
        return mana;
    }

    public double getHp() {
        hp = 10;
        return hp;
    }


    public String getRaceName(){
        return raceName = "Dwarf";
    }
    @Override
    public String toString() {
        return "Dwarf [mana=" + mana + ", hp=" + hp + ", getRaceName()=" + getRaceName() + "]";
    }
}
package characterCreation;

import java.util.Scanner;

public class CharacterDemo {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        CreateCharacter create = new CreateCharacter();
        System.out.println("Choose your Race: ");
        String userRace = input.next();

        create.setName(new Name("Daxel"));
        //create.setCharacterRace(race);
        System.out.println(create.getName());
        //Dwarf dwarf = new Dwarf();
        System.out.println(create.getCharacterRace().getDwarf().getRaceName());
        //System.out.println(create.getCharacterRace().setDwarf(new Dwarf("dwarf",10,5)));
    }

}

1 个答案:

答案 0 :(得分:0)

你必须在create上调用setCharacterRace();然后在characterRace上调用setDwarf();否则create.getCharacterRace()将为null并且create.getCharacterRace()。getDwarf()将抛出NullPointerException。

我不理解您的代码背后的逻辑,但请尝试下面的代码:

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        CreateCharacter create = new CreateCharacter();
        System.out.println("Choose your Race: ");
        String userRace = input.next();

        create.setName(new Name("Daxel"));

        //***********new code starts******
        CharacterRace myRace = new CharacterRace(userRace, 20, 9);
        myRace.setDwarf(new Dwarf("dwarf",10,5));
        create.setCharacterRace(myRace);
        //***********new code ends********

        //create.setCharacterRace(race);
        System.out.println(create.getName());
        //Dwarf dwarf = new Dwarf();
        System.out.println(create.getCharacterRace().getDwarf().getRaceName());
        //System.out.println(create.getCharacterRace().setDwarf(new Dwarf("dwarf",10,5)));
    }