gpt4 book ai didi

java - 如何正确配置多个构造函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:51 26 4
gpt4 key购买 nike

我正在做一个基于继承的赋值,我创建了 2 个构造函数,它们应该做不同的事情。一个构造函数没有任何参数,应该产生一个预定义的值,另一个构造函数有 2 个参数,包括名称和年龄,类型为 String 和 int。我以某种方式重新配置了这两个构造函数,使它们都不会产生它们应有的结果。以下是调用这些构造函数的类:

动物(父类(super class))

abstract public class Animal implements Comparable<Animal>
{
int age;
String name;

Animal(String name, int age)
{
this.age = age;
this.name = name;
}

Animal()
{
this("newborn", 0);
}

public int getAge()
{
return age;
}

public void setName(String newName)
{
name = newName;
}

String getName()
{
return name;
}
}

食肉动物

public class Carnivore extends Animal
{
Carnivore(String name, int age)
{
this.age = age;
this.name = name;
}

Carnivore()
{
super();
}

@Override
public int compareTo(Animal o)
{
//To change body of generated methods, choose Tools | Templates.
throw new UnsupportedOperationException("Not supported yet.");
}
}

public class Wolf extends Carnivore
{
String name;
int age;

Wolf(String name, int age)
{
this.name = name;
this.age = age;
}

Wolf()
{
super();
}

String getName()
{
return name;
}
}

主要方法

System.out.println("************1st constructor of Wolf************");
Wolf wolfExample = new Wolf("Bob", 2) {};
System.out.println("Name = " + wolfExample.getName());
System.out.println("Age = " + wolfExample.getAge());

System.out.println("************2nd constructor of Wolf************");
Wolf newWolf = new Wolf();
System.out.println("Name = " + newWolf.getName());
System.out.println("Age = " + newWolf.getAge());

实际输出

************1st constructor of Wolf************
Name = Bob
Age = 0
************2nd constructor of Wolf************
Name = null
Age = 0

预期输出

************1st constructor of Wolf************
Name = Bob
Age = 2
************2nd constructor of Wolf************
Name = newborn
Age = 0

年龄正在返回它们的默认值,第二个构造函数的名称也返回 null 但我不太清楚为什么。这是我第一次使用多个构造函数,所以我对它的工作原理有点困惑,所以非常感谢任何帮助,谢谢。

最佳答案

您的基类似乎是正确的,但您需要更改您的实现。

你的 WolfCarnivore 构造函数应该是:

Wolf(String name, int age)   
{
super(name, age);
}

原因是,您正在为每种类型设置 local 实例变量,但调用父类(super class)的 getAge() 方法 - 这是获取父类(super class)的值 age,它的值实际上并没有被分配到任何地方,并被赋予了一个默认值 0name 也是如此,默认为 null

您需要使用传递的变量调用super,而不需要为每个扩展对象重新定义它们。

关于java - 如何正确配置多个构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com