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

Java中创建并填充Shape类型数组及子类方法调用问题

解决Shape数组调用子类方法的问题

先确认基础类结构

确保Shape和Sphere的类定义符合继承规范,示例如下:

Shape类(父类)

public abstract class Shape {
    // 抽象方法,子类必须实现
    public abstract double getArea();
    // 普通成员方法
    public void printBasicInfo() {
        System.out.println("这是一个几何图形");
    }
}

Sphere类(子类)

public class Sphere extends Shape {
    private double radius;

    public Sphere(double radius) {
        this.radius = radius;
    }

    // 重写父类的抽象方法
    @Override
    public double getArea() {
        return 4 * Math.PI * radius * radius;
    }

    // Sphere类特有的方法
    public double getVolume() {
        return (4.0/3) * Math.PI * Math.pow(radius, 3);
    }
}

调用方法的两种场景

1. 调用父类Shape中定义的方法(含子类重写的)

当你把Sphere实例存入Shape类型数组时,编译器会将数组元素视为Shape类型,但多态机制会自动调用子类的重写实现,直接调用即可:

public class ShapeManager {
    public static void main(String[] args) {
        Shape[] shapes = new Shape[1];
        shapes[0] = new Sphere(5.0);

        // 调用父类的普通方法
        shapes[0].printBasicInfo();
        // 调用子类重写的getArea方法
        System.out.println("球体表面积:" + shapes[0].getArea());
    }
}

2. 调用Sphere类的特有方法

由于数组声明为Shape类型,直接调用子类特有方法会编译报错,需要先判断类型再向下转型:

public class ShapeManager {
    public static void main(String[] args) {
        Shape[] shapes = new Shape[1];
        shapes[0] = new Sphere(5.0);

        // 先判断元素是否为Sphere类型,避免转型异常
        if (shapes[0] instanceof Sphere) {
            Sphere sphere = (Sphere) shapes[0];
            // 调用Sphere特有方法
            System.out.println("球体体积:" + sphere.getVolume());
        }
    }
}

排查常见问题

  • 确保Shape类的方法是public访问权限,否则其他类无法调用
  • 确认Sphere类通过extends Shape正确继承父类
  • 如果Shape是接口,需保证Sphere实现了接口的所有抽象方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:35:28