Java 子class 抽象class 的构造函数
Java constructor of a subclass of an abstract class
我开始开发我的第一个 java 项目,这是一种基本的角色扮演游戏。我想创建一个角色。
首先我会解释一些事情:
Game
class - 获取字符 class 输入(如 Fighter)。
Character
- 拥有所有角色数据。
CharacterClass
- 摘要 class,包括每个字符的信息 class(如 Fighter
)。
Fighter
(和其他 classes)扩展了摘要 class CharacterClass
,应该为所选角色设置初始统计数据 class(如 Fighter
).
我想做的是在Game
中选择一个角色class(假设我选择Fighter
),并通过displayStats
获取所有数据。当角色选择 class 时,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 私有字段受保护而不是私有,以便子classes 可以访问它们,要么在您的摘要 class 中实现 getters/setters 并在您的子class构造函数。
此外 super.field 没有任何意义:您正在实例化一个对象,该对象将具有抽象 class 和子 class 的字段,它将是 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,因为力量已经被figther修改了,但是智力仍然是CharacterClass中定义的。
请注意,您可能希望您的播放器不仅仅是 CharacterClass 或 Figther。虽然你会有很多 Figther、Rogues 和 Mages 作为 PNJ,但玩家会有其他一系列的可能性,比如在他的库存中存储物品、与世界互动等。
祝你游戏顺利!
我开始开发我的第一个 java 项目,这是一种基本的角色扮演游戏。我想创建一个角色。
首先我会解释一些事情:
Game
class - 获取字符 class 输入(如 Fighter)。Character
- 拥有所有角色数据。CharacterClass
- 摘要 class,包括每个字符的信息 class(如Fighter
)。Fighter
(和其他 classes)扩展了摘要 classCharacterClass
,应该为所选角色设置初始统计数据 class(如Fighter
).
我想做的是在Game
中选择一个角色class(假设我选择Fighter
),并通过displayStats
获取所有数据。当角色选择 class 时,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 私有字段受保护而不是私有,以便子classes 可以访问它们,要么在您的摘要 class 中实现 getters/setters 并在您的子class构造函数。
此外 super.field 没有任何意义:您正在实例化一个对象,该对象将具有抽象 class 和子 class 的字段,它将是 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,因为力量已经被figther修改了,但是智力仍然是CharacterClass中定义的。
请注意,您可能希望您的播放器不仅仅是 CharacterClass 或 Figther。虽然你会有很多 Figther、Rogues 和 Mages 作为 PNJ,但玩家会有其他一系列的可能性,比如在他的库存中存储物品、与世界互动等。
祝你游戏顺利!