我遇到了一些涉及代码的问题,这些代码接受了超类中定义的变量,这些变量后来在子类中进行了修改。即
//start of Stat class. Variables in question are defined here. (Name, Level, Experience, totalXP)
public class Stat {
public static String Name = " ";
public static int Level = 0;
public static double Experience = 0;
public static double totalXP = 0;
//Sets Name
public static void setName(String NameIn) {
Name = NameIn;
}
//Sets Level
public static void setLevel(int LevelIn) {
Level = LevelIn;
}
//Sets Experience
public static void setExperience(double ExperienceIn) {
Experience = ExperienceIn;
}
//Sets totalXP
public static void settotalXP(double totalXPIn) {
totalXP = totalXPIn;
}
//Sets up Attributes
public static void setall() {
setName("Herp");
setLevel(1);
setExperience(0);
settotalXP(0);
}
//Displays a Stat's Attributes
public static void DisplayLevel() {
System.out.println(Name);
System.out.println("Level: " + Level);
System.out.println(Experience + " out of " + totalXP + " total experience.");
}//End of method
public static void Levelup() {
if(Experience >= totalXP) {
Level++;
totalXP = totalXP * 1.3;
Experience = 0;
}//end of if statement
}//end of Levelup method
}//end of Stat.class
public class Agility extends Stat{
{//Revisionary Block
Name = "Agility";
Level = 1;
Experience = 0;
totalXP = 125;
}
public static int runnappDodge(int Dodge) {
Random generator = new Random(10);
Dodge = generator.nextInt(10);
if (Dodge == 0) {
Player.incomingDMG = 0;
}//end of if statement
return Dodge;
}
//start of the method located on player.class. This prints out " ", 0.0 and 0.0 for all //of the fields.
public static void checkLevel() {
System.out.println("You are level: " + Level);
System.out.println("You have " + experience + " experience out of " + totalXP + " total experience");
System.out.println(stat.Attack.Name + " Level: " + stat.Attack.Level + ": Experience: " + stat.Attack.Experience + "/" + stat.Attack.totalXP);
System.out.println(stat.Archery.Name +" Level: " + stat.Archery.Level +": Experience: " + stat.Archery.Experience + "/" + stat.Archery.totalXP);
System.out.println(stat.Agility.Name +" Level: " + stat.Agility.Level + ": Experience: " + stat.Agility.Experience + "/" + stat.Agility.totalXP);
}//end of checkLevel method
我的完整代码在这里:http://pastebin.com/6nPGwJQe
reddit没有帮助所以我现在转向你。 (不是说你没有帮助,但我只是使用reddit,所以它更方便)。我认为我的代码应该更新子类中的变量但它没有。当我引用变量时,它最终会被超级类定义,在Aaron.name的情况下,“”而不是“Aaron”。我不确定getter和setter在这里是否有用,但我很感激所有的建议
PS:关于stackoverflow的第一个问题!
编辑:感谢您的反馈。这是示例代码。最后一位评论者提供了很多帮助,但我的真实代码完全独立于此。这是传达一个例子。所以请查看链接,因为该代码真正重要。 编辑2:因为我可以看到可能需要查看我的项目的结构以进行导入和参考,这里是我的项目结构的图像:http://imgur.com/VhDzRrm
编辑3:我的帖子不再使用不正确的示例,它使用我的实际代码。
答案 0 :(得分:1)
Java非常清楚区分大小写。由于您已经扩展了Derp类,因此您的Aaron类现在有两个String字段。名称和名称。这就是它没有显示任何内容的原因,因为您已将名称String实例化为“”。如果你用Aaron.Name替换它,你将拥有你想要的东西。
答案 1 :(得分:0)
我会在您的代码中查看一些问题。
首先显然,它没有编译,正如其他人所指出的那样。你应该采用你的实际代码,并删除任何与问题没有密切关系的东西。继续剥离,直到您的示例代码与您在此处发布的内容一样小,但请确保它仍然可以编译。见http://sscce.org/
可能的情况是,你会发现你的错误,在这种情况下你自己回答问题(是的,你可以这样做)。如果没有,请使用实际代码编辑您的问题。
现在,要解决您的问题:
无需为 Aaron 使用匿名构造函数。应该是
public class Aaron extends Derp {
public Aaron() { Name = "Aaron"; IQ = 10; }
}
(Something告诉我你来自C ++背景。)
“name”是一个实例变量,这意味着它只作为 Derp (或 Aaron )类型的对象的一部分存在。首先需要创建一个对象,然后引用 。
public static void main() {
Aaron aaron = new Aaron();
System.out.println("Hi, my name is: " + aaron.name + "!\n");
}
您还可以将名称设为类变量:
static String name = " ";
但是没有好办法在子类中覆盖该变量,所以我们不会去那里。
最后一点:在println()调用中你不需要“\ n”,因为该函数会为你添加换行符。