Java面向对象动物分类代码中move()方法的正确实现方式
代码问题说明
- 核心功能不符合要求:题目明确要求
move()方法返回字符串,你当前实现的move()是void无返回值类型,仅直接打印内容,完全不符合返回值要求。 - 方法参数设计错误:题目要求
move()使用对应类自身存储的leg_number、wing_number属性值,不需要额外传入参数,你给所有move()都加了多余的入参,调用时还要手动传属性值,逻辑冗余且不符合要求。 - 类属性设计冗余:父类
Animal已经定义了color和leg_number属性,子类Cat、Bug、Bird重复定义同名属性属于无意义的属性隐藏,且父类属性为private修饰,子类无法直接访问,修正时将父类属性修饰符改为protected允许子类直接访问即可。 - Bird类move方法不符合重写规则:Bird的
move()参数列表和父类不一致,不属于方法重写,且逻辑中使用的是传入的参数值,而非自身实例存储的wing_number属性。 - 主方法存在笔误:测试
bird2时错误调用了bird1.move(),实际应该调用bird2.move()。
修正后完整代码
public class SocratesApp { public static void main(String[] args) { Cat myCat = new Cat("orange", 4); System.out.println(myCat.move()); Bug myBug = new Bug("green", 16); System.out.println(myBug.move()); Bird bird1 = new Bird("yellow", 2, 2); System.out.println(bird1.move()); Bird bird2 = new Bird("brown", 2, 0); System.out.println(bird2.move()); } } class Animal { protected String color; protected int leg_number; public Animal(String color, int leg_number) { this.color = color; this.leg_number = leg_number; } public String move() { return "I'm moving with " + leg_number + " legs!"; } } class Cat extends Animal { public Cat(String color, int leg_number) { super(color, leg_number); } @Override public String move() { return "I'm moving with " + leg_number + " legs!"; } } class Bug extends Animal { public Bug(String color, int leg_number) { super(color, leg_number); } @Override public String move() { return "I'm moving with " + leg_number + " legs!"; } } class Bird extends Animal { protected int wing_number; public Bird(String color, int leg_number, int wing_number) { super(color, leg_number); this.wing_number = wing_number; } @Override public String move() { if (wing_number > 0) { return "I'm flying"; } else { return "I'm moving with " + leg_number + " legs!"; } } }
内容的提问来源于stack exchange,提问作者apex2022
相关产品推荐
相关产品推荐

