java - 如何在不修改基类的情况下利用多态性
问题描述
我正在使用 Eclipse 中的 Junit 测试对学生的 Java 编程作业进行评分。我的目标是尽可能少地修改学生的提交,但我目前的方法迫使我在他们的提交中输入“extends ParentClass” 。
我目前的方法是将每个学生作业放在自己的包中,并从父类扩展我想测试的类
学生苹果示例课
package PA04.studentA;
import PA04.providedCode.TestApple;
public class apple extends TestApple {
public void print() {
System.out.println("Look I can Print A");
}
}
学生B苹果示例课
package PA04.studentB;
import PA04.providedCode.TestApple;
public class apple extends TestApple {
public void print() {
System.out.println("Look I can Print B");
}
}
TESTAPPLE 家长班
package PA04.providedCode;
public abstract class TestApple {
public abstract void print();
}
然后,我使用超类参数类型的辅助方法来验证学生程序的行为
学生考试计划
@Test
void testStudentA() {
PA04.studentA.apple a = new PA04.studentA.apple();
packageTest(a);
}
@Test
void testStudentB() {
PA04.studentB.apple b = new PA04.studentB.apple();
packageTest(b);
}
/**
* helper method to test behavior of classes with the same name
* but different packages
*/
private void packageTest(TestApple a) {
a.print();
}
学生测试计划的输出
Look I can Print A
Look I can Print B
输出是我所期望的,但是这种方法需要我修改学生的程序来扩展父类
有没有一种方法可以在不修改它们的情况下为不同的学生班级使用帮助方法?
解决方案
不幸的是,我想不出一个简单的方法来解决您的问题。可能值得研究使用宏添加extends ParentClass
到每个包中。这是在 IntelliJ 中制作宏的教程。
推荐阅读
- python - SQL 密码中的特殊字符
- r - 如何处理 R 中合并的列标题?
- apache-kafka - 如何为 Confluent Schema Registry 指定 nodePort?
- autodesk-data-management - Data Management API 获取文档的完整文件夹路径
- r - 在 Shiny 中选择单选按钮的活动选项卡
- flutter - RenderBox 未布置:RenderFittedBox#79644 relayoutBoundary=up1
- nlp - XLNetForSequenceClassification 预训练模型无法加载
- google-colaboratory - 从 Google Colabortory 下载输出文件
- php - axios 请求返回错误 500 (laravel, axios & vuejs)
- python - 为什么这个方法说 1 的平方是 3?