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

如何用Java实现Shape基类及Circle、Rectangle子类的面积计算功能

原代码存在的问题

  • 需求明确要求Shape为图形基类,但代码中将Shape定义为写在main方法内部的局部接口,和需求要求的基类定义完全不符
  • Circle、Rectangle类没有继承Shape类,没有实现面向对象的继承重写逻辑
  • 没有按照要求在Circle类中定义半径r、Rectangle类中定义长宽a/b作为类的成员属性,而是通过lambda临时传参计算,不符合封装要求
  • 面积计算方法返回值为void,仅直接打印结果,需求要求方法计算后返回面积数值
  • Rectangle类的打印内容错误标注为正方形面积,和实际逻辑不符
  • 所有类都嵌套定义在Main类的main方法内,属于局部内部类,无法在外部复用,不符合Java类的定义规范
  • 存在无意义的空类Shapes,属于冗余代码

修正后的实现代码

package com.company;

// 定义图形基类Shape
abstract class Shape {
    // 定义面积计算抽象方法,子类需重写,返回double类型的面积值
    public abstract double calculateArea();
}

// 圆形类继承Shape
class Circle extends Shape {
    // 新增成员属性:圆半径r
    private double r;

    // 构造方法初始化半径
    public Circle(double r) {
        this.r = r;
    }

    // 重写父类面积计算方法
    @Override
    public double calculateArea() {
        return Math.PI * r * r;
    }
}

// 矩形类继承Shape
class Rectangle extends Shape {
    // 新增成员属性:长a、宽b
    private double a;
    private double b;

    // 构造方法初始化长宽
    public Rectangle(double a, double b) {
        this.a = a;
        this.b = b;
    }

    // 重写父类面积计算方法
    @Override
    public double calculateArea() {
        return a * b;
    }
}

// 主类测试
public class Main {
    public static void main(String[] args) {
        Shape circle = new Circle(1.55);
        System.out.printf("圆形面积为:%.2f%n", circle.calculateArea());

        Shape rectangle = new Rectangle(1.55, 2.55);
        System.out.printf("矩形面积为:%.2f%n", rectangle.calculateArea());
    }
}

内容的提问来源于stack exchange,提问作者Ahmed Ali Rajput

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 03:36:00