我正在做一个基于继承概念的项目,并创建了一个超级构造函数,它本身有两个变量(String,int),然后在继承超级构造函数类的子构造函数中调用这个超级构造函数。然后我使用两个方法在构造函数中返回这些变量的属性。 age属性输出正常,但String属性返回null。这是代码:
动物超类
abstract public class Animal
{
int age;
String name;
Animal(String name, int age)
{
this.age = age;
this.name = name;
}
Animal()
{
this("newborn", 0);
}
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
}
狼子类
public class Wolf extends Carnivore
{
String name;
int age;
Wolf(String name, int age)
{
this.name = name;
this.age = age;
}
Wolf()
{
super();
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
主要方法类
public class Main {
public static void main(String[] args)
{
Wolf newWolf = new Wolf();
System.out.println("Name = " + newWolf.getName());
System.out.println("Age = " + newWolf.getAge());
}
}
年龄返回为0,这是正确的,但System.out.println("Name = " + newWolf.getName());
似乎返回null而不是“新生儿”。感谢您解决此问题的任何帮助。
更新 - 对于我未包含在此示例中的其他构造函数,我需要getName()
方法,那么有没有办法让它们都存在?
答案 0 :(得分:2)
这里的问题是你在子类中定义你的字段,你不需要从父类继承它们。
你的类有两组字段,一组来自super(这些是你的构造函数设置的,调用super()
而另一组来自子类(这些是你的getter返回的,没有初始化。零是int的默认值,也没有设置。)
只需从子类中删除字段定义
即可