java:使用继承构建动物园的问题

rkue9o1l  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(202)

我是java新手,在继承方面遇到了问题。我正在执行一个活动,其中有一个父类(动物)和一个子类(本例中为giraffe),它们继承父类的字段。我被要求有一个默认构造函数和一个在父类和子类的示例中都接受参数的构造函数。
我遇到的问题是,当我运行printinfo()时,它返回父类的默认构造函数(“species”)中的物种的默认值,而不是子类(“giraffe”)。我曾假设giraffe子类将继承这个父类方法,但这里似乎有些不对劲。
(请注意,我的每个类都是单独的文件)
如有任何帮助或指点,将不胜感激。

// Parent class:

public class Animal {
    String name;
    String species;
    int age;

    // default constructor
    public Animal() {
    name = "name";
    species = "species";
    age = 0;
    }

    // constructor w/ parameters
    public Animal(String name, String species, int age){
        this.name = name;
        this.species = species;
        this.age = age;
    }

    // method for printing out animal info
            void printInfo() {
            System.out.println(name + ", " + species + ", " + age);
    }

} 

// Child class:

public class Giraffe extends Animal {
    String species = "giraffe";

    // default giraffe constructor
    public Giraffe() {
        super();
        name  = "Errol";
        age = 0;
    }

    // giraffe constructor with parameters
    public Giraffe(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

}

// Main class (calls printInfo method from Animal parent class)

public class ZooBuilder {

    public static void main(String[] args) {

        Giraffe one = new Giraffe("Mark", 23);

        one.printInfo();

    }
}

Prints: *Mark, species, 23*
knpiaxh1

knpiaxh11#

更改giraffe构造函数以调用完整构造函数

public Giraffe(String name, int age) {
    super(name, "Giraffe", age);
}

将默认值更改为与上述内容相同

相关问题