在jshell中测试抽象类需先用abstract class定义,再通过匿名内部类或局部子类实现抽象方法;支持构造方法调用、字段初始化及继承机制验证,全程无需编译文件。

在 JShell 中测试抽象类,核心思路是:先定义抽象类,再用匿名内部类或局部子类快速实现它,跳过编译、写文件、编译运行的繁琐流程。JShell 的交互特性让这个过程非常轻量。
定义抽象类要带 abstract 关键字
直接输入抽象类结构,JShell 会识别并接受(注意不能 new 实例):
- 必须用 abstract class 声明,不能省略 abstract
- 可以包含普通字段、构造方法、具体方法和抽象方法
- 例如:abstract class Shape { String name; Shape(String name) { this.name = name; } abstract double area(); }
用匿名类立即实现并调用
这是最常用的快速验证方式,适合一次性测试抽象方法逻辑:
- 语法简洁:new Shape("circle") { double area() { return 3.14 * 2 * 2; } };
- JShell 自动创建实例,并执行你提供的实现
- 后续可直接调用该实例的方法,比如 $.area()($ 表示上一个表达式结果)
用局部命名子类绕过重复匿名写法
如果需要多次实例化或测试不同行为,定义一个临时子类更清晰:
- 在 JShell 中输入:class Circle extends Shape { Circle(String n) { super(n); } double area() { return 3.14 * 5 * 5; } }
- 然后直接:new Circle("big").area()
- 子类名只在当前 JShell 会话有效,退出即消失,无需清理
配合构造方法和字段验证初始化逻辑
抽象类的构造方法会在子类实例化时被调用,这点在 JShell 中同样生效:
- 在抽象类中加打印语句,比如 Shape(String name) { System.out.println("Creating: " + name); }
- 每次 new 子类时都会触发,能直观看到父类初始化流程
- 字段赋值、super() 调用等继承机制与标准 Java 完全一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











