子类可以修改Java中抽象超类中静态方法的行为吗?

时间:2011-06-23 14:51:53

标签: java oop inheritance static-methods

我正在使用“参数化”跑步者来执行一些测试。我正在从XML文件生成测试数据。这很好用。

现在我想将此行为应用于多个测试类,而不必复制测试数据生成代码。所以我创建了一个抽象类,它完成了从“一个”XML文件填充测试数据的工作。如果子类可以告诉我使用哪个XML文件,那么我就可以实现我的目标。

但我一直无法找到办法。

这是我的超级

@RunWith(Parameterized.class)
public abstract class AbstractXMLDrivenTest{
     @@Parameters
     public static Collection<Object[]> generateData () {
         /* Reads an XML File and returns test input data */
     }
}

这是一个子类

public class TestSomeThing extends AbstractXMLDrivenTest {
     public TestSomeThing(args) {
     /* Args are populated by generateData in superclass */
     }
}

如果我在AbstractXMLDrivenTest中使用用于TestSomething的XML文件,这可以正常工作。 我希望XML文件由子类(即TestSomething)定义,以便我可以将超类与其他测试用例一起使用。我希望现在很清楚。

5 个答案:

答案 0 :(得分:2)

Java中没有静态方法的继承。此外,静态方法对其类是否为抽象没有区别 - 类只有静态方法的作用域函数。

为了使用继承,请使用非静态方法。这样,您就可以从子类非静态方法或非静态字段中提取XML文件名。

答案 1 :(得分:0)

不,子类不能覆盖静态方法。

http://www.coderanch.com/how-to/java/OverridingVsHiding

答案 2 :(得分:0)

无论是否为抽象类,都无法在Java中覆盖静态方法。

答案 3 :(得分:0)

只需一个子类即可。不要将测试子类相乘,只需在不同的测试文件上调用测试方法即可。实际上,你最好不要让你的测试类成为一个子类,而只是将它自己作为一个单独的类。

如果您想使用行业标准测试,请查看JUnit。

修改
您没有仔细阅读该文档。您根本不需要子类: 您可以通过generateData构建各种测试用例作为数组构建。 在您的情况下,您将拥有一组{("test1.xml", objectResult1), ("test2.xml", objectResult2),...}形式的对。测试类的构造函数是表单的 ParametrizedTest(String fileXML, ObjectResult result)

答案 4 :(得分:0)

如果您的xml文件名存储为超类的静态成员,请让您的子类在调用generateTestData之前指定该值。