回顾:图形计算器
本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 33 课,共 87 课。
挑战
简单让我们来构建一个形状计算器,把你在本章学到的所有多态概念结合起来。你将创建一个抽象 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 在线编译器