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
classname
变量设置为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 Csuper()
不是一个变量。读这篇文章——我试过了,但上面说要创建一个VetOffice构造函数,当我这么做的时候,上面说。未定义的隐式超级构造函数必须显式调用另一个构造函数。是否有一种方法可以将setName与超类一起使用。ie Animal.setName或super(setName)。好的,它正在工作,谢谢。我怎样才能联系到你以备将来的问题?
Animal.setName(console.next());
System.out.println(Animal.getName());