实现
将设计转化为可运行的代码:定义基类,实现具体图形,并从混合列表中打印结果。
实现 是 CoddyKit 上的免费 Java Academy 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 3 节课。
计划回顾
我们会编写带有 area() 和 perimeter() 的基础 Shape,然后添加 Circle 和 Rectangle。名称要简短,计算要易读,并优先使用小型辅助方法来完成输出。
代码:基类与 Circle
基类定义接口,并提供一个小型 info() 辅助方法。Circle 实现计算逻辑和 toString(),以便生成清晰的输出。
public class Main {
// Base class with a tiny print helper
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() {
return String.format("area=%.2f, per=%.2f", area(), perimeter());
}
}
static class Circle extends Shape {
double radius;
Circle(double r) {
// simple guard to avoid negative sizes for beginners
radius = (r < 0) ? 0 : r;
}
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
public String toString() { return "Circle " + info(); }
}
public static void main(String[] args) {
Shape s = new Circle(2.5);
System.out.println(s); // prints Circle area/perimeter
}
}
构造方法与保护措施
构造方法负责设置字段。为方便初学者理解,我们会通过将负数输入限制为零来防止 negative 输入。实际应用会使用验证或异常,但这里保持简单。
代码:添加 Rectangle
Rectangle 加入继承层次结构,并使用相同的接口。请注意,因为基类定义了契约,所以两个形状都可以用相同的代码打印。
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = (r < 0) ? 0 : r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
public String toString() { return "Circle " + info(); }
}
static class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) {
this.w = (w < 0) ? 0 : w;
this.h = (h < 0) ? 0 : h;
}
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
public String toString() { return "Rectangle " + info(); }
}
public static void main(String[] args) {
Shape a = new Circle(3.0);
Shape b = new Rectangle(4.0, 2.0);
System.out.println(a);
System.out.println(b);
}
}
列表与输出
Shape 列表让我们可以混合 Circle 和 Rectangle。简单的循环就能打印每个项目。对于移动设备上的输出,每行显示一个形状,并将数字格式化为小数点后两位。
代码:小型报告
报告:一个小型循环会打印每个形状的类型和摘要。多态让循环保持整洁,同时每个形状负责自己的计算。
public class Main {
static abstract class Shape {
abstract double area();
abstract double perimeter();
String label() { return getClass().getSimpleName(); }
String info() { return String.format("area=%.2f, per=%.2f", area(), perimeter()); }
}
static class Circle extends Shape {
double radius;
Circle(double r) { radius = (r < 0) ? 0 : r; }
double area() { return Math.PI * radius * radius; }
double perimeter() { return 2 * Math.PI * radius; }
}
static class Rectangle extends Shape {
double w, h;
Rectangle(double w, double h) { this.w = (w < 0) ? 0 : w; this.h = (h < 0) ? 0 : h; }
double area() { return w * h; }
double perimeter() { return 2 * (w + h); }
}
public static void main(String[] args) {
Shape[] shapes = { new Circle(1.2), new Rectangle(2.0, 3.0), new Circle(0.5) };
for (int i = 0; i < shapes.length; i = i + 1) {
Shape s = shapes[i];
System.out.println(s.label() + " -> " + s.info());
}
}
}
实现检查
快速检查:在这个继承层次结构中,每个具体形状都必须实现什么?
回顾
回顾:我们编写了 Shape、Circle 和 Rectangle,添加了简单的保护措施,并从混合列表中打印了一份小型报告。下一课将学习多态行为,例如按 area 排序。
常见问题解答
「实现」课时是免费的吗?
是的 — 「实现」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 3 节课。
「实现」这节课中我会学到什么?
将设计转化为可运行的代码:定义基类,实现具体图形,并从混合列表中打印结果。 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「实现」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。