如何用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
相关产品推荐
相关产品推荐

