Menu
CoddyTech

回顾:图形计算器

本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 33 课,共 87 课。

challenge icon

挑战

简单

让我们来构建一个形状计算器,把你在本章学到的所有多态概念结合起来。你将创建一个抽象 Shape 类和具体子类,然后使用多态统一计算并显示面积。

你需要把代码分成 4 个文件:

  • Shape.java:创建一个抽象类,作为所有形状的基类。每个形状都有一个 name 字段(String)。添加一个用于初始化该字段的构造函数、一个 getter 方法 getName(),以及一个返回 double 的抽象方法 getArea()。另外,添加一个方法 describe(),让它返回:[name]: [area](其中 area 使用 String.format("%.2f", getArea()) 格式化为 2 位小数)。
  • Circle.java:创建一个继承自 Shape 的具体类。圆有一个 radius 字段(double)。使用 super 将 "Circle" 作为名称传入。实现 getArea(),使用 Math.PI * radius * radius 返回面积。
  • Rectangle.java:创建另一个继承自 Shape 的具体类。矩形有 width 和 height 字段(均为 double)。将 "Rectangle" 作为名称传给父类构造函数。实现 getArea(),返回 width 乘以 height 的结果。
  • Main.java:构建一个形状计算器,演示多态的实际应用。你会收到 3 个输入:圆的半径、矩形的宽度和矩形的高度。

    创建一个 Circle 和一个 Rectangle,然后将它们存入一个由 Shape 引用组成的数组中。遍历这个数组,对每个形状调用 describe() 方法并打印其描述。

    遍历结束后,计算并打印所有形状的总面积,格式为:Total area: [sum](同样格式化为 2 位小数)。使用单独的循环或累加器,通过对每个形状引用调用 getArea() 来累加面积。

你会收到 3 个输入:圆的半径(double)、矩形的宽度(double)和矩形的高度(double)。

输出应有 3 行,每个形状的描述各占一行,最后一行是总面积。注意,你可以通过抽象 Shape 类型统一处理不同的形状,同时每种形状都以自己的方式计算面积!

亲手试试

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取输入
        double radius = scanner.nextDouble();
        double width = scanner.nextDouble();
        double height = scanner.nextDouble();
        
        // TODO:使用 radius 创建一个 Circle 对象
        
        // TODO:使用 width 和 height 创建一个 Rectangle 对象
        
        // TODO:创建一个 Shape 引用数组,并将两个形状都存入其中
        
        // TODO:遍历数组,使用 describe() 打印每个形状的描述
        
        // TODO:计算所有形状的总面积
        // 使用循环或累加器,对每个形状调用 getArea(),将面积相加
        
        // TODO:按格式 "Total area: [sum]" 打印总面积
        // 使用 String.format("%.2f", totalArea) 设置格式
    }
}

面向对象编程中的所有课

自己练习: Java 在线编译器