【发布时间】:2016-01-09 23:36:17
【问题描述】:
好的,所以有两个类Player 和子类Classes。我使用子类通过 switch 语句在主类中设置玩家统计信息,让用户选择他的类。但是由于某种原因,设置变量在主类中执行时超出了范围。为了我的爱,我不知道为什么会这样
这是Player 类:
public class Player {
private int HP;
private int ATK;
private int DEF;
private int DAMAGE;
void setHP(int a){
HP=a;
}
void setATK(int a){
ATK=a;
}
void setDEF(int a){
DEF=a;
}
void setDAMAGE(){
DAMAGE = damageCalculation();
}
int damageCalculation(){
int damage = (2*ATK);
return damage;
}
Player(String Class){
Classes classes = new Classes();
switch(Class){
case "Barbarian":
classes.Barbar();
System.out.println("Done");
break;
case "Rogue":
break;
default: System.out.println("Error");
}
}
void getStats(){
System.out.format("Player stats:"
+ "\nHP: %d"
+ "\nATK: %d"
+ "\nDEF: %d"
+ "\nDAMAGE: %d\n",HP,ATK,DEF,DAMAGE);
}
}
这是Classes 类(注意在子类中获取统计信息返回有效值):
public class Classes extends Player {
public void Barbar(){
Player player = new Player();
player.setHP(60);
player.setATK(15);
player.setDEF(25);
player.setDAMAGE();
player.getStats();
}
}
这里是main 类:
import java.util.Scanner;
public class SurvivalGame {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in,"Windows-1250");
System.out.println("Enter your class");
Player player = new Player(scan.nextLine());
player.getStats(); //here getStats return zeros,
//possibly out of scope variables if player enters Barbarian
}
}
【问题讨论】:
-
你期望 public void Barbar() 方法做什么?你在哪里称呼它?我想你希望它是一个构造函数,但构造函数不是这样的。
-
因为您在
barbar构造函数中创建了一个新的播放器实例,而不是使用父Player
标签: java inheritance scope