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

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

我在 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
2个回答
3
投票

您的

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

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

通过向上面示例中的

super()
添加参数,您将使用子类中提供的参数调用 Animal 的构造函数,因此它将被设置为字段。

如果您只调用

super()
,您实际上是将操作委托给第一个无参数构造函数,该构造函数会将您的动物名称初始化为 Unknown Animal


-1
投票

在 Java 中,如果 getter 方法没有返回构造函数中设置的值,可能有以下几种原因:

构造函数初始化不正确:确保构造函数正确初始化字段。

java 复制代码 公共类我的类{ 私有 int 值;

// Constructor
public MyClass(int value) {
    this.value = value;
}

// Getter
public int getValue() {
    return value;
}

} 对象实例化问题:确保正确创建对象并在正确的实例上调用 getter 方法。

java 复制代码 MyClass obj = new MyClass(5); System.out.println(obj.getValue()); // 应该打印 5 Setter 方法覆盖:如果有更新值的 setter 方法,请验证它没有被调用并无意中覆盖构造函数值。

检查这些点以确保 getter 返回正确的值。

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