抽象类的具体子类作为原始类中的参数而没有抽象方法实现

时间:2014-05-20 08:24:37

标签: java parameters abstract-class

我正在使用boofCV,我在某个时候发现了一个被删除的课程:

public class WrapDetectDescribeSurf
        <T extends ImageSingleBand, II extends ImageSingleBand>
    implements DetectDescribePoint<T,SurfFeature>
{...}

我发现ImageSingleBand是一个抽象类,至少有3个抽象方法:

protected abstract Object _getData();
public abstract ImageTypeInfo<T> getTypeInfo();
protected abstract void _setData(Object data);

据我所知,要创建一个抽象的子类,你应该实现基类的抽象方法。我在上面的代码中找不到这些方法的任何实现。我无法理解这个实施可以放在哪里。我的意思是TII都是在原始类WrapDetectDescribeSurf的参数化中定义的。

那么这里发生了什么?您不需要实现抽象方法吗?我在这里问了一个类似的问题:Method return type contains subclass definition但我并没有完全解决我的无知。

1 个答案:

答案 0 :(得分:1)

ImageSingleBand的实现必须实现抽象方法。

泛型声明T和II只是声明,它告诉编译器,T和II是扩展 ImageSingleBand的类。换句话说:T和II将是ImageSingleBand的子类。

因此,'WrapDetectDescribeSurf'的实例化可能如下所示:

new WrapDetectDescribeSurf<ImageInteger, ImageFloat>();

ImageInteger和ImageFloat是ImageSingleBand的具体子类。

更具体一点:

ImageSingleBand(http://boofcv.org/javadoc/boofcv/struct/image/ImageSingleBand.html)的子类可以是

这些类实现了抽象方法。