首页 > 解决方案 > 如何在不修改基类的情况下利用多态性

问题描述

我正在使用 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

输出是我所期望的,但是这种方法需要我修改学生的程序来扩展父类

有没有一种方法可以在不修改它们的情况下为不同的学生班级使用帮助方法?

标签: javainheritance

解决方案


不幸的是,我想不出一个简单的方法来解决您的问题。可能值得研究使用宏添加extends ParentClass到每个包中。这是在 IntelliJ 中制作宏的教程。


推荐阅读