Java开发中如何调用继承类中的方法?
嘿,我来帮你把Java里调用继承类方法的事儿说清楚,结合你给的代码示例一步步拆解:
一、先补全合理的继承结构(你的代码里没明确,我先帮你理顺)
首先得明确类之间的继承关系,不然没法谈调用。假设你的代码里是这样的继承链:
// 父类:所有Tims商品的抽象类 public abstract class TimsProduct { protected double price; // 商品价格,子类可以访问 // 抽象方法,子类必须实现 public abstract double getRetailPrice(); } // 子类:甜甜圈,继承自TimsProduct public class Donut extends TimsProduct { // 静态工厂方法创建Donut实例 public static Donut create() { Donut chocolateDonut = new Donut(); chocolateDonut.price = 3.99; // 给甜甜圈设个价格 return chocolateDonut; } // 重写父类的getRetailPrice方法 @Override public double getRetailPrice() { return this.price; } }
二、调用继承类方法的核心场景与实现
1. 子类内部想调用父类的方法?用super关键字
如果子类重写了父类的方法,但又想在子类逻辑里复用父类的实现,就用super。比如如果Donut要加个额外的包装费:
@Override public double getRetailPrice() { // 先调用父类的getRetailPrice拿基础价 double basePrice = super.getRetailPrice(); // 加50分包装费 return basePrice + 0.5; }
2. 直接用子类对象调用继承的方法
当你拿到子类的实例时,不管是继承的方法还是重写的方法,都可以直接调用:
Donut myDonut = Donut.create(); // 直接调用子类重写后的getRetailPrice double finalPrice = myDonut.getRetailPrice(); System.out.println("甜甜圈价格:" + finalPrice); // 会输出4.49(如果加了包装费的话)
3. 多态场景下的方法调用(最常用!)
Java的多态特性是说:父类引用指向子类对象时,调用方法会自动执行子类的重写版本。比如你的TimsOrder里用TimsProduct[]存商品,里面放的是Donut对象,调用getRetailPrice时会自动用Donut的实现:
// 修正你原代码里的create方法问题(原代码静态方法不能访问实例属性size) public static TimsOrder create(String customerName, int orderSize) { TimsProduct[] items = new TimsProduct[orderSize]; for (int i = 0; i < items.length; i++) { items[i] = Donut.create(); // 把Donut对象放进父类型数组 } // 遍历数组调用每个商品的价格 for (int i = 0; i < items.length; i++) { // 这里会自动调用Donut的getRetailPrice,而不是父类的抽象方法 System.out.println("第" + (i+1) + "件商品价格:" + items[i].getRetailPrice()); } return new TimsOrder(customerName, orderSize); }
4. 帮你修正原代码里的几个坑
你的原代码有几个影响方法调用的问题,得先 fix 掉:
TimsOrder里的getRetailPrice方法用了price,但这个类根本没有price属性!这个方法应该是TimsProduct的子类才有的逻辑,TimsOrder作为订单类,应该遍历商品去计算总价才对- 静态方法
orderItem里的item = chocolate;完全没用!Java是值传递,修改方法参数的引用不会改变外部数组里的元素,直接把Donut对象赋值给数组元素就行 - 静态方法
create不能直接访问实例属性size,得把size作为参数传进来
三、关键要点总结
- 子类能调用父类所有非私有的方法(私有方法子类继承不了)
- 用
super可以在子类内部调用父类的方法,即使子类已经重写了它 - 多态场景下,父类引用调用方法时,会自动匹配子类的重写实现,这是面向对象编程的核心之一
- 注意访问权限:父类的private方法、private属性,子类都碰不到,更别说调用了
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

