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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:55:51