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

我正在基于继承进行分配,并创建了两个构造函数,假定它们可以做不同的事情.一个构造函数没有任何参数,并且应该产生一个预定义的值,另一个构造函数具有2个参数,其中包括名称和类型为String和int的年龄.我以某种方式重新配置了两个构造函数,以使它们都不产生应有的外观.这是这些构造函数在其中调用的类:

 

动物(超一流)

 

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,但我不太确定为什么.这是我第一次与多个构造函数一起工作,因此我有点困惑,因为它可以工作,所以任何帮助将不胜感激,谢谢.

Inm小程序商店 | Vultr中文网

最佳答案

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

 

您的Wolf和Carnivore构造函数应为:

 

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

原因是,您正在为每种类型设置局部实例变量,但是调用了超类的getAge()方法-这是获取超级年龄的值,该年龄的值实际上并未分配到任何地方,并且默认值为0.名称相同,默认为null.

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值