3 changed files with 107 additions and 0 deletions
@ -0,0 +1,50 @@ |
|||
// 1. 定义父类 Shape
|
|||
class Shape { |
|||
// 定义一个 draw 方法,可以提供一个默认实现或声明为抽象方法
|
|||
public void draw() { |
|||
System.out.println("正在绘制一个形状..."); |
|||
} |
|||
} |
|||
|
|||
// 2. 定义子类 Circle,继承自 Shape
|
|||
class Circle extends Shape { |
|||
// 重写 (Override) 父类的 draw 方法
|
|||
@Override |
|||
public void draw() { |
|||
System.out.println("正在绘制一个圆形..."); |
|||
} |
|||
} |
|||
|
|||
// 3. 定义子类 Rectangle,继承自 Shape
|
|||
class Rectangle extends Shape { |
|||
// 重写 (Override) 父类的 draw 方法
|
|||
@Override |
|||
public void draw() { |
|||
System.out.println("正在绘制一个矩形..."); |
|||
} |
|||
} |
|||
|
|||
// 4. 主测试类
|
|||
public class ShapeTest { |
|||
|
|||
// 定义题目要求的 drawShape 方法
|
|||
// 这个方法接收一个 Shape 类型的参数,体现了多态
|
|||
public static void drawShape(Shape s) { |
|||
// 调用传入对象的 draw 方法
|
|||
// 在运行时,JVM会根据对象的实际类型(Circle或Rectangle)来决定调用哪个方法
|
|||
s.draw(); |
|||
} |
|||
|
|||
// main 方法,程序的入口
|
|||
public static void main(String[] args) { |
|||
// 创建 Circle 和 Rectangle 的实例
|
|||
Shape circle = new Circle(); |
|||
Shape rectangle = new Rectangle(); |
|||
|
|||
// 调用 drawShape 方法进行测试
|
|||
System.out.println("--- 开始测试 ---"); |
|||
drawShape(circle); // 输出: 正在绘制一个圆形...
|
|||
drawShape(rectangle); // 输出: 正在绘制一个矩形...
|
|||
System.out.println("--- 测试结束 ---"); |
|||
} |
|||
} |
|||
@ -0,0 +1,56 @@ |
|||
// 1. 定义抽象父类 Vehicle
|
|||
abstract class Vehicle { |
|||
// 定义一个抽象方法 run()
|
|||
// 抽象方法没有方法体(只有分号),必须在非抽象的子类中被实现
|
|||
public abstract void run(); |
|||
} |
|||
|
|||
// 2. 定义子类 Car,继承自 Vehicle
|
|||
class Car extends Vehicle { |
|||
// 必须实现 (Implement) 父类的抽象方法 run()
|
|||
@Override |
|||
public void run() { |
|||
System.out.println("小汽车在高速公路上飞驰..."); |
|||
} |
|||
} |
|||
|
|||
// 3. 定义子类 Bike,继承自 Vehicle
|
|||
class Bike extends Vehicle { |
|||
// 必须实现 (Implement) 父类的抽象方法 run()
|
|||
@Override |
|||
public void run() { |
|||
System.out.println("自行车在乡间小路上骑行..."); |
|||
} |
|||
} |
|||
|
|||
// 4. 定义子类 Truck,继承自 Vehicle
|
|||
class Truck extends Vehicle { |
|||
// 必须实现 (Implement) 父类的抽象方法 run()
|
|||
@Override |
|||
public void run() { |
|||
System.out.println("大卡车在重载货物,缓慢行驶..."); |
|||
} |
|||
} |
|||
|
|||
// 5. 主测试类
|
|||
public class VehicleTest { |
|||
public static void main(String[] args) { |
|||
// 创建一个 Vehicle 类型的数组,用于存放不同的车辆对象
|
|||
// 数组的大小为3,因为我们有三类车
|
|||
Vehicle[] garage = new Vehicle[3]; |
|||
|
|||
// 向数组中存入不同子类的实例
|
|||
garage[0] = new Car(); |
|||
garage[1] = new Bike(); |
|||
garage[2] = new Truck(); |
|||
|
|||
// 遍历数组,并调用每个元素的 run() 方法
|
|||
System.out.println("--- 车辆开始运行 ---"); |
|||
for (Vehicle v : garage) { |
|||
// 这里同样体现了多态
|
|||
// 虽然 v 的编译时类型是 Vehicle,但运行时会根据其实际对象类型(Car, Bike, Truck)调用相应的方法
|
|||
v.run(); |
|||
} |
|||
System.out.println("--- 所有车辆已停止 ---"); |
|||
} |
|||
} |
|||
@ -0,0 +1 @@ |
|||
今日利用AI辅助完成Java面向对象编程练习,重点解决了代码规范性与核心概念应用问题。针对Shape与Vehicle两道题目,AI提供了包含完整类结构、标准注释及主测试类的规范代码,弥补了初始代码过于精简的缺陷。在调试阶段,精准定位并修复了VehicleTest类名拼写错误及文件名不匹配的编译异常。通过AI生成的示例,深入理解了抽象类定义、方法重写及父类数组存储子类对象的多态应用,有效提升了编码效率与对OOP思想的实践能力。 |
|||
Loading…
Reference in new issue