Java 如何从用户输入访问超类变量

Java 如何从用户输入访问超类变量,java,Java,我正在尝试从用户输入访问超类变量名。 我不知道如何让超类变量名指向用户输入。这是它的代码。有什么想法吗?谢谢 package chapter4; import java.util.Scanner; public class VetOffice extends Animal { public VetOffice(int lifeExpectancy, int weight, String name, Character gender, String ty

我正在尝试从用户输入访问超类变量名。 我不知道如何让超类变量名指向用户输入。这是它的代码。有什么想法吗?谢谢

    package chapter4;
    import java.util.Scanner;

    public class VetOffice extends Animal {

        public VetOffice(int lifeExpectancy, int weight, String name, Character gender, String type) {
            super(lifeExpectancy, weight, name, gender, type);
            // TODO Auto-generated constructor stub
        }
       public static void main(String[] args) {

        Scanner console = new Scanner(System.in);

                System.out.print("Please enter name of pet");
                //super(name);
                //= console.next();
        //}
        }   
    }
    //}

问题是您不能在
main
方法中访问超类变量。因为它是
静态的
方法。如果要在
main()
中访问,必须将
Animal
class
name
变量设置为static。然后您可以直接在
main()
中关联一个值

像这样:

在动物课上

static String name;
在办公室里

name = console.next();
你可以尝试不同的方法,这取决于你要实现的目标,你必须做出决定

此变量是否可以声明为
静态
?因为每个对象的
静态
变量都是公共的

另一种方法是

Animal
类成员变量创建getter和setter。然后,您也不能在main方法中访问,因为您还必须将这些方法和变量设置为静态

作为一种解决方案,您不需要将它们设置为静态的,也不需要新的方法,甚至不需要在super class中设置getter和setter,您可以为super class创建默认构造函数,并指定如下值:

如果超类中的变量是
private
,则必须创建getter和setter

public static void main(String[] args) {
   Scanner console = new Scanner(System.in);
   System.out.print("Please enter name of pet");

   VetOffice pet = new VetOffice();
   pet.name = console.next();
   System.out.println(pet.name);
} 
注意:如果不需要从
VetOffice
或super类创建对象,则创建默认构造函数,因为您必须将值传递给构造函数

更新:

根据你的评论

如果超类中的变量是
private
请执行以下操作:

public static void main(String[] args) {
   Scanner console = new Scanner(System.in);
   System.out.print("Please enter name of pet");

   VetOffice pet = new VetOffice();
   pet.setName(console.next());
   System.out.println(pet.getName());
}
您在评论中要求的另一种方式:

动物类(部分实现以向您展示)

然后在主要方法中:

Animal.setName(console.next());
System.out.println(Animal.getName());

如果您可以共享
Animal
超类,可能会有所帮助。
VetOffice
继承其超类
Animal
的属性(字段和方法)。因此,如果超类中有
getters
&
setters
方法,您可以在子类中使用它们。
VetOffice
扩展
动物
???这是一个危险的信号…我在动物课上有能手和二传手。那么如何创建一个VetOffice对象呢。如何在VetOffice中调用setName()。好的,我明白这一点,但是为什么我不调用变量super来从super类访问变量名。@Derrick C
super()
不是一个变量。读这篇文章——我试过了,但上面说要创建一个VetOffice构造函数,当我这么做的时候,上面说。未定义的隐式超级构造函数必须显式调用另一个构造函数。是否有一种方法可以将setName与超类一起使用。ie Animal.setName或super(setName)。好的,它正在工作,谢谢。我怎样才能联系到你以备将来的问题?
Animal.setName(console.next());
System.out.println(Animal.getName());