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 = " ";