Java实战:基于Rect子类重写方法,用Class.forName动态创建对象
好的,我明白你的需求。我们将基于 `Rect` 类创建一个子类,并重写 `getArea()` 方法。然后,我们将通过 `Class.forName(args[0])` 动态加载这个子类并创建其对象。 首先,假设我们有一个 `Rect` 类,如下所示: ```java public class Rect { protected double width; protected double height; public Rect(double width, double height) { this.width = width; this.height = height; } public double getArea() { return width * height; } } ``` 接下来,我们创建一个 `Rect` 的子类 `Square`,并重写 `getArea()` 方法: ```java public class Square extends Rect { public Square(double side) { super(side, side); } @Override public double getArea() { // 重写 getArea 方法,这里简单返回边长的平方 return Math.pow(width, 2); } } ``` 现在,我们编写一个主类 `Main`,通过 `Class.forName(args[0])` 动态加载子类并创建对象: ```java public class Main { public static void main(String[] args) { if (args.length < 1) { System.out.println("Usage: java Main <class name>"); return; } try { Class<?> clazz = Class.forName(args[0]); if (Rect.class.isAssignableFrom(clazz)) { // 创建构造器对象 if (clazz.equals(Rect.class)) { Rect rect = (Rect) clazz.getConstructor(double.class, double.class).newInstance(5.0, 10.0); System.out.println("Area of Rect: " + rect.getArea()); } else if (clazz.equals(Square.class)) { Square square = (Square) clazz.getConstructor(double.class).newInstance(5.0); System.out.println("Area of Square: " + square.getArea()); } else { System.out.println("Unsupported class: " + args[0]); } } else { System.out.println("The provided class is not a subclass of Rect."); } } catch (Exception e) { e.printStackTrace(); } } } ``` 解释 1. Rect 类:定义了一个矩形类,包含宽度和高度属性,以及计算面积的方法。 2. Square 类:继承自 `Rect` 类,重写了 `getArea()` 方法,使其返回边长的平方。 3. Main 类: - 检查命令行参数是否提供类名。 - 使用 `Class.forName(args[0])` 动态加载指定的类。 - 检查加载的类是否是 `Rect` 的子类。 - 根据不同的类创建对象并调用 `getArea()` 方法。 运行示例 假设你已经编译了所有类文件,可以使用以下命令运行程序: ```sh java Main Rect ``` 输出: ``` Area of Rect: 50.0 ``` ```sh java Main Square ``` 输出: ``` Area of Square: 25.0 ``` 这样,你就可以通过命令行参数动态加载不同的类并执行相应的操作。 ######[AI写代码神器 | 700点数解答 | 2024-10-30 12:50:13]
- Java 实现复制粘贴功能:打造简易文本复制粘贴程序(GPT | 1497点数解答 | 2024-08-25 09:40:33)436
- Java 实现计算机硬件模拟:从 PCI 设备到主板、计算机的启动与关闭(字节豆包 | 716点数解答 | 2024-12-08 23:38:38)354
- Java 代码:模拟计算机主板启动与关闭 PCI 设备全流程(字节豆包 | 637点数解答 | 2024-12-09 08:31:54)320
- 代码改造:巧用vw和vh让代码适配不同屏幕大小(讯飞星火 | 623点数解答 | 2024-08-23 11:41:50)298
- Layui框架微信群组信息管理HTML模板:代码分析、优化建议与注意要点(DeepSeek | 644点数解答 | 2025-03-11 15:42:55)256
- 递归实现:将对象所有属性值转换为字符串!含代码示例(字节豆包 | 143点数解答 | 2024-11-08 10:25:12)390
- 递归实现:将对象所有属性值转换为字符串类型(字节豆包 | 142点数解答 | 2024-11-11 21:06:15)269
- 递归实现:将对象所有属性值转换为字符串,复杂嵌套也不怕!(阿里通义 | 467点数解答 | 2024-11-12 09:07:17)281
- Vue组件打造:功能丰富的图片标注编辑器全解析(百度文心 | 521点数解答 | 2025-08-15 13:15:46)154
- 解决数据库“dm.jdbc.driver.dmexception: 数据溢出”问题的全步骤指南(阿里通义 | 598点数解答 | 2024-10-15 15:48:38)335
- 达梦数据库数据溢出问题排查及多维度解决方法(阿里通义 | 403点数解答 | 2024-10-15 15:48:41)1229
- Python:继承 rect 类打造 NewRect 类,实现位置管理与矩形属性操作(字节豆包 | 110点数解答 | 2025-01-02 23:42:09)270