Java:getter 方法不返回对象构造函数中设置的值

问题描述 投票:0回答:1

我正在 Coursera 上学习 Amazon Junior Dev 课程,并正在完成第一门课程的最终项目,该课程重点关注继承和多态性。

更广泛的任务是创建一个动物园。我目前正在研究的问题的结构是顶部有一个抽象类

Animal
,和两个子类
Tiger
Dolphin

这个任务是让我在调用父类的默认构造函数的同时构建子类,这样我就可以在实例化 Tiger 和 Dolphin 对象时通过 main 方法中的构造函数传递特定的字符串,并从抽象继承 getter 方法父类将该字符串返回为

nameOfAnimal
,或者在父类中实例化并通过构造函数通过子类继承的字符串属性。

在父类中,动物:

String nameOfAnimal;

// no argument constructor
public Animal() {
      nameOfAnimal = "Unknown Animal";
    }

    // parametrized constructor
public Animal(String nameOfAnimal) {
       this.nameOfAnimal = nameOfAnimal;
    }

public String getNameOfAnimal() {
        return nameOfAnimal;
    }

    public void setNameOfAnimal(String nameOfAnimal) {
        this.nameOfAnimal = nameOfAnimal;
    }

在子类中,调用超类的构造函数:

 public Tiger(String nameOfAnimal){
        super();

鉴于父类和子类中的上述代码,我在 main 方法中尝试了以下方法:

Tiger tigerObject = new Tiger("Tiger");

任务是使用 getter 方法返回动物的名称,这样

System.out.println("The animal which is chosen is : " + tigerObject.getNameOfAnimal());
将返回
 The animal which is chosen is: Tiger

不幸的是,无论我尝试什么配置,它都会返回

The animal which is chosen is: Unknown Animal
,我认为如果我调用无参数构造函数而不是参数化构造函数,将会返回该值。

自从我实例化了该对象,特别是将“Tiger”作为 nameOfAnimal 传递,我一生都无法弄清楚我做错了什么。

谢谢!

java inheriting-constructors
1个回答
0
投票

您的

Tiger
构造函数应将
nameOfAnimal
参数委托给超类,如下所示:

public Tiger(String nameOfAnimal){
        super(nameOfAnimal);

我什至不知道你是如何没有编译失败的(假设 Animal 中的构造函数是唯一的)。在上面的示例中,您使用子类中提供的参数调用 Animal 的构造函数,因此它将被设置为字段。

© www.soinside.com 2019 - 2024. All rights reserved.