构造函数中的变量返回null?

时间:2016-11-27 23:25:50

标签: java

我正在做一个基于继承概念的项目,并创建了一个超级构造函数,它本身有两个变量(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()方法,那么有没有办法让它们都存在?

1 个答案:

答案 0 :(得分:2)

这里的问题是你在子类中定义你的字段,你不需要从父类继承它们。

你的类有两组字段,一组来自super(这些是你的构造函数设置的,调用super()而另一组来自子类(这些是你的getter返回的,没有初始化。零是int的默认值,也没有设置。)

只需从子类中删除字段定义

即可