子类重写父类方法失效求助:SpecialItem未正确计算price值
排查SpecialItem重写price逻辑失效的问题
看起来你遇到了Java多态重写的经典问题——明明写了子类的重写逻辑,但程序还是走了父类的计算逻辑。我来帮你排查几个最可能的原因,以及对应的解决办法:
1. 方法签名不匹配,导致没有真正重写父类方法
这是最常见的错误!如果子类的方法和父类的方法签名不一致,Java会把它当成一个新的方法,而不是重写。比如:
- 父类方法是
public double calculatePrice(),子类写成了public float calculatePrice()(返回类型不兼容) - 方法名写错了,比如
calculateprice(小写p) - 子类方法的访问权限比父类更严格(比如父类是
public,子类写成protected)
解决办法:
给子类的方法加上@Override注解!这个注解会让编译器帮你检查是否真的重写了父类的方法——如果签名不对,编译器直接报错,避免你踩坑。
示例代码:
// Item.java(父类) public class Item { protected double size; public Item(double size) { this.size = size; } // 父类的价格计算方法,默认是2*size public double calculatePrice() { return 2 * size; } } // SpecialItem.java(子类) public class SpecialItem extends Item { public SpecialItem(double size) { super(size); } // 加上@Override确保是重写,不是重载 @Override public double calculatePrice() { // 特殊商品的逻辑:3*size return 3 * size; } }
2. 实例化了父类对象,而非子类对象
就算你写对了子类的重写逻辑,如果在HomeItem里实例化的是Item对象,而不是SpecialItem对象,程序还是会走父类的逻辑。比如你可能写了:
// 错误写法:选了选项1,但还是new了父类对象 if (choice == 1) { Item item = new Item(size); }
解决办法:
当选择选项1时,必须实例化SpecialItem对象,利用Java的多态特性(父类引用指向子类对象):
// HomeItem.java里的正确逻辑 import java.util.Scanner; public class HomeItem { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("输入商品尺寸:"); double size = scanner.nextDouble(); System.out.print("选择商品类型(1=特殊商品,2=普通商品):"); int choice = scanner.nextInt(); Item item; if (choice == 1) { // 关键:实例化子类对象 item = new SpecialItem(size); } else { item = new Item(size); } // 调用方法时,会自动触发对应类的重写逻辑 double price = item.calculatePrice(); System.out.printf("最终价格:$%.2f%n", price); } }
3. 父类的价格计算逻辑不是可重写的方法
如果父类的价格计算是直接写在构造方法里,或者是private、final方法,子类根本无法重写它。比如:
// 错误的父类写法:price是构造方法里计算的,子类无法修改 public class Item { private double price; public Item(double size) { this.price = 2 * size; // 直接在构造方法计算,子类没法改 } public double getPrice() { return price; } }
解决办法:
把价格计算逻辑抽成一个独立的、可重写的方法(比如上面的calculatePrice()),让子类可以重写这个方法来改变计算逻辑。
测试验证
当你按照上面的写法修改后,输入size=3.4,选择选项1,应该得到$10.20(3*3.4),而不是之前的$6.8。
内容的提问来源于stack exchange,提问作者Lalayla Straill
相关产品推荐
相关产品推荐

