我试图从用户输入中访问超类变量名。 我不确定如何让超类变量名指向用户输入。这是它的代码。任何想法都谢谢你。
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();
//}
}
}
//}
答案 0 :(得分:0)
问题是你无法在main
方法中访问超类变量。因为它是static
方法。如果您想在main()
中访问,则必须将Animal
类name
变量设置为静态。然后,您可以直接在main()
。
像这样:
在Animal类中,
static String name;
在VetOffice中,
name = console.next();
您可以尝试不同的方式,具体取决于您必须决定的事情,
此变量是否可以声明为static
?因为每个对象都有static
个变量。
另一种方法是
为Animal
类成员变量创建getter和setter。然后你也无法访问main方法,因为你还必须将这些方法和变量设置为静态。
作为一个没有将它们静态化的解决方案或者一个新的方法,甚至是超类中的getter和setter,你可以为超类创建默认构造函数并分配如下的值:
如果超类中的变量为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
或超类创建对象,则必须将值传递给构造函数。
<强>更新强>
根据你的评论
如果超类中的变量为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());
}
您在评论中要求的另一种方式:
动物类(部分实施以向您展示)
public class Animal {
int lifeExpectancy;
static int weight;
static String name;
Animal(int lifeExpectancy, int weight, String name, Character gender, String type){
this.weight = weight;
this.name = name;
}
public static String getName() {
return name;
}
public static void setName(String n) {
name = n;
}
}
然后在主要方法中:
Animal.setName(console.next());
System.out.println(Animal.getName());