gpt4 book ai didi

Java 抽象类的子类的构造函数

转载 作者:行者123 更新时间:2023-12-02 04:16:04 25 4
gpt4 key购买 nike

我开始开发我的第一个java项目,它是一种基本的角色扮演游戏。我想创建一个角色。

首先我会解释一些事情:

  • Game class - 获取角色类别输入(如战斗机)。
  • Character - 拥有所有角色数据。
  • CharacterClass - 包含每个字符类信息的抽象类(如 Fighter )。
  • Fighter (和其他类)扩展了抽象类 CharacterClass ,应为所选字符类设置初始统计信息(如 Fighter )。

我想要做的是在 Game 中选择一个角色类别(假设我选择 Fighter ),并通过 displayStats 获取所有统计数据。当角色选择职业时 Game应该调用类似:Chracter ch = new Character(name, scan) ,然后 ch.displayCharacter .

我的问题是Fighter的构造函数并将此数据分配给 Character的构造函数。

public class Game {
public static void main(String[] args) {

System.out.println("Choose a character: ");
System.out.println("1. Fighter");
System.out.println("2. Rogue");
System.out.println("3. Mage");
System.out.println("4. Cleric");


Scanner sc = new Scanner(System.in);
int scan = sc.nextInt();
System.out.println("Character Class: " + CharacterUtil.getCharacterClass(scan));

System.out.println("Choose Name:");
Scanner nameIn = new Scanner(System.in);
String name = nameIn.next();
System.out.println("Name: " + name);

}
}


public class Character {

private String name;
private String characterClass;
private int level;
private int hp;
private int currentHp;
private long xp;
/*private int BAB; /*Base attack bonus*/

private int strength;
private int constitution;
private int dexterity;
private int intelligence;
private int wisdom;
private int charisma;

Character(String name, String chracterClass){

this.name = name;
this.characterClass = chracterClass;
level = ;
hp = ;
currentHp = hp;
xp = 0;
strength = ;
constitution = ;
dexterity = ;
intelligence = ;
wisdom = ;
charisma = ;


}


void displayCharacter(){
System.out.println("Name: " + name);
System.out.println("Level: " + level);
System.out.println("Class: " + characterClass);
System.out.println("HP: " + hp);
System.out.println("Attributes: ");
System.out.println("Strength: " + strength);
System.out.println("Constitution: " + constitution);
System.out.println("Dexterity: " + dexterity);
System.out.println("Intelligence: " + intelligence);
System.out.println("Wisdom: " + wisdom);
System.out.println("Charisma: " + strength);
System.out.println("XP: " + xp);

}

}
<小时/>
abstract class CharacterClass {

private int level;
private int hp;

private int strength;
private int constitution;
private int dexterity;
private int intelligence;
private int wisdom;
private int charisma;

CharacterClass(){

level = 1;
hp = 10;
strength = 10;
constitution = 10;
dexterity = 10;
intelligence = 10;
wisdom = 10;
charisma = 10;
}
<小时/>
class Fighter extends CharacterClass {

Fighter(){
super.level = 1;
super.hp = 10;
super.strength = 16;
super.constitution = 14;
super.dexterity = 14;
super.intelligence = 10;
super.wisdom= 10;
super.charisma = 10;
}
}

最佳答案

要么将您的CharacterClass私有(private)字段设置为 protected 而不是私有(private),以便子类可以访问它们,要么在抽象类中实现getter/setter并在子类构造函数中使用它们。

此外,super.field 没有任何意义:您正在实例化一个对象,该对象将具有来自抽象类和子类的字段,您想要访问的将是 this.fields。

示例代码:

public abstract class CharacterClass {

private int intelligence;
private int strength;
private int dexterity;
private int vitality;

protected CharacterClass() {
setIntelligence(10);
setStrength(10);
setDexterity(10);
setVitality(10);
}

public int getDexterity() {
return dexterity;
}
protected void setDexterity(int dexterity) {
this.dexterity = dexterity;
}
public int getVitality() {
return vitality;
}
protected void setVitality(int vitality) {
this.vitality = vitality;
}
public int getStrength() {
return strength;
}
protected void setStrength(int strength) {
this.strength = strength;
}
public int getIntelligence() {
return intelligence;
}
protected void setIntelligence(int intelligence) {
this.intelligence = intelligence;
}

}
<小时/>
public class Fighter extends CharacterClass {

public Fighter() {
setStrength(15);
setVitality(15);
}

}
<小时/>
public class Main {

public static void main(String[] args) {
CharacterClass player = new Fighter();

System.out.println(player.getStrength());
System.out.println(player.getIntelligence());
}

}

这将打印 15,然后是 10,因为强度已被 Fightther 修改,但智力仍然是在 CharacterClass 中定义的。

请注意,您可能希望您的玩家不仅仅是一个角色类别或一名战士。虽然你将拥有很多作为 PNJ 的格斗者、盗贼和法师,但玩家将拥有一系列其他可能性,例如在库存中存储元素、与世界互动等。

祝您游戏愉快!

关于Java 抽象类的子类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33305461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com