Java 扩展类问题
我遇到了一些问题,涉及到访问超类中定义的变量的代码,这些变量后来在子类中进行了修改。即Java 扩展类问题,java,subclass,Java,Subclass,我遇到了一些问题,涉及到访问超类中定义的变量的代码,这些变量后来在子类中进行了修改。即 //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 s
//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
我的完整代码如下:
reddit没有帮助,所以我现在转向你。并不是说你帮不上忙,而是我只是更多地使用reddit,这样更方便。我认为我的代码应该更新子类中的变量,但事实并非如此。当我引用这个变量时,它就变成了在Aaron.name的例子中由超类定义时的样子,而不是Aaron。我不确定一个能手和二传手在这里是否有用,但我感谢所有的建议
PS:我的第一个问题是关于stackoverflow
编辑:谢谢你的反馈。这是示例代码。最后一位评论者帮了大忙,但我真正的代码完全独立于此。这是为了传达一个例子。所以请看链接,因为代码才是真正重要的。
编辑2:因为我可以看到为了导入和引用可能需要查看我的项目结构,下面是我的项目结构的图像:
编辑3:我的帖子不再使用不正确的示例,而是使用我的实际代码。Java非常清楚区分大小写。由于扩展了Derp类,Aaron类现在有两个字符串字段。名字和名字。这就是为什么它不显示任何内容,因为您已将名称字符串实例化为。如果您将其替换为Aaron.Name,您将获得所需的内容。我将讨论代码中的一些问题 首先,很明显,正如其他人所指出的,它没有编译。您应该使用实际的代码,去掉与问题无关的任何内容。继续剥离,直到您的示例代码与您在此处发布的代码一样小,但请确保它仍然可以编译。看 很有可能,你会发现错误,在这种情况下,张贴你自己的答案的问题是,你可以这样做。如果没有,请用实际代码编辑您的问题 现在,为了解决您的问题: Aaron不需要使用匿名构造函数。应该是的
public class Aaron extends Derp {
public Aaron() { Name = "Aaron"; IQ = 10; }
}
有些事情告诉我你来自C++背景。
name是一个实例变量,这意味着它仅作为Derp或Aaron类型的对象的一部分存在。首先需要创建一个对象,然后引用该对象
您还可以将名称设置为类变量:
static String name = " ";
但是在子类中没有重写该变量的好方法,所以我们不去那里
最后一个提示:在println调用中不需要这个\n,因为该函数为您添加了一个换行符。Derp有一个名为name的字段,而Aaron有一个名为name的字段。这是两个独立的字段。你是如何编译的?不应编译Aaron.name,因为您没有对象,所以不能调用非静态var@elbek这是一个警告AFAIK@user2658898,这段代码编译没有错误吗?主题有一个输入错误:extended class issues sic。@AnttiHaapala是的,你是正确的。我错了。他应该为他的变量使用访问修饰符,并使用getter、setter和构造函数。我没有意识到我有名字和名字,我只想要名字。如果有人愿意看一看已经成功编译的实际代码,那么报告回来将非常有用helpful@Aaron那么,您在使用checkLevel方法时遇到了问题?看起来您正试图通过点运算符访问子类。你不需要那样做。如果所有类都在同一个包中,则可以简单地调用所需的类。例如Agility.NameYes,但是checkLevel方法位于main.Player类上,并且统计数据在统计数据包中。您是否建议重组我的项目以进行补偿?请查看链接以了解我的项目结构:
static String name = " ";