2

我有很多“表单”类,所有这些类都扩展了Form. 我有一个名为的抽象类FormService和扩展此类的特定表单服务。我想要做的是调用一个抽象方法populate(),它采用一种形式,从而通过继承为给定类型调用正确的服务。

所以我有类似的东西:

public abstract FormService {
    public abstract void populate(Form form);
}

public TestFormService extends FormService {
    public void populate(TestForm form) {
      //populate
    }

TestForm扩展的类型在哪里Form。这是可能的,因为我似乎无法获得我想要的效果。

4

2 回答 2

9

您可以使用泛型:

public abstract FormService<F extends Form> {
    public abstract void populate(F form);
}

public TestFormService extends FormService<TestForm> {
    @Override
    public void populate(TestForm form) {
      //populate
    }
}

请注意,@Override此处的使用只是一种很好的做法,但与问题无关。

于 2012-04-12T16:13:34.300 回答
-1

是的,这是可能的。正如在子类中重写方法时,始终可以使用父类方法中声明为参数的超类的子类。在此示例中,因为 testForm 是 Form 类的子类,所以这将起作用。拇指规则是在覆盖时我们总是可以限制层次结构但不能扩大层次结构。

假设Form类的父类是Document。在 TestFormService 类填充方法中,我们不能使用 Document 作为参数。这将违反最重要的规则。

于 2016-01-30T11:02:45.877 回答