【问题标题】:Java inheritance with abstract method带有抽象方法的 Java 继承
【发布时间】:2012-04-25 00:44:28
【问题描述】:

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

所以我有类似的东西:

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

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

其中TestForm 是扩展Form 的类型。这可能是因为我似乎无法获得我想要的效果吗?

【问题讨论】:

    标签: java generics inheritance polymorphism abstract-class


    【解决方案1】:

    你可以使用泛型:

    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 只是一种好习惯,但与问题无关。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你不应该描述重载,然后 OP 询问覆盖。所以,请张贴一个你的意思的例子,这样你的意思就更清楚了。
      • 我尝试添加代码示例。但是给出了某种格式错误。
      • 有例子吗?
      猜你喜欢
      • 2011-03-10
      • 2010-09-29
      • 2013-07-01
      • 2012-11-17
      • 2012-01-09
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多