You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用构造方法时如何使用类属性值 面向对象继承作业问题求解

存在的问题

  • 子类重复定义父类已有属性:Cat、Bug、Bird中都重复声明了color和leg_number属性,父类Animal已经将这两个属性定义为protected,子类可以直接访问,重复声明会导致属性隐藏,出现预期外的取值问题。
  • 构造方法逻辑冗余:子类构造方法先调用super给父类属性赋值,随后又写死覆盖属性值,导致构造方法传入的参数完全无效,这也是你觉得传参没有意义的核心原因。
  • Bird类的move方法不符合要求:你写的move(int wing_number)是重载而非重写父类的无参move方法,且判断逻辑用的是方法传入的参数而非类自身的wing_number属性,同时所有move方法要求返回字符串,你当前实现是void类型直接打印,不满足作业要求。

修正方案

1. 代码调整

如果作业要求Cat默认是橙色、4条腿,Bug默认是绿色、16条腿,Bird默认是黄色、2条腿,不需要自定义这些属性,直接把构造方法改为无参,固定给父类传值即可:

class Animal {
    protected String color;
    protected int leg_number;

    public Animal(String color, int leg_number) {
        this.color = color;
        this.leg_number = leg_number;
    }

    // 父类move方法也同步改为返回String
    public String move() {
        return "I'm moving with " + leg_number + " legs!";
    }
}

class Cat extends Animal {
    // 删掉重复定义的color、leg_number属性
    public Cat() {
        super("orange", 4); // 直接传固定值给父类构造
    }

    @Override
    public String move() {
        return "I'm moving with " + leg_number + " legs!";
    }
}

class Bug extends Animal {
    public Bug() {
        super("green", 16);
    }

    @Override
    public String move() {
        return "I'm moving with " + leg_number + " legs!";
    }
}

class Bird extends Animal {
    private int wing_number; // 只保留新增的wing_number属性

    public Bird(int wing_number) {
        super("yellow", 2);
        this.wing_number = wing_number;
    }

    @Override
    public String move() { // 无参重写父类方法
        if (this.wing_number > 0) {
            return "I'm flying";
        } else {
            return "I'm moving with " + leg_number + " legs!";
        }
    }
}

如果作业允许自定义不同实例的颜色和腿数,就删掉构造方法里写死覆盖属性的代码,保留原有参数即可,此时new Cat("orange",4)就是完全符合要求的写法。

2. 实例化方式

调整后实例化不需要传颜色和腿数参数,直接调用对应构造即可:

// Main方法中实例化示例
Animal myCat = new Cat();
Animal myBug = new Bug();
Animal myBird = new Bird(2); // 只需要传翅膀数量

// 调用move方法示例
System.out.println(myCat.move());
System.out.println(myBird.move());

内容的提问来源于stack exchange,提问作者apex2022

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:39:03