openCV中的Java多态性



好吧,这可能是一个愚蠢的问题,但我对java有点生疏,所以……我扩展了Mat类,以便添加新的变量。它按预期工作,但当我尝试使用一个返回母类类型并将其分配给子类的方法时,如下所示:

    Supermat Matchild; <-- (essentially the wrapper class i've made)
    MatChild = (Supermat) imread(name);

它返回给我这个错误:

java.lang.ClassCastException: org.opencv.core.Mat cannot be cast to images.Supermat

有人能告诉我为什么会发生这种情况吗?如果有解决办法的话?

您的命名和代码风格令人困惑。即使是这两条线也很难理解。学习Java编码标准。

你说你做到了:

public class CustomMat extends Mat {
}

这意味着您可以在代码中调用Mat的任何位置使用CustomMat

Mat mat = new CustomMat();

为什么这样做?因为CustomMat IS-a Mat;这就是继承的意义。

如果给你一个Mat引用,并且你确定它指向一个CustomMat实例,你可以强制转换它。但你已经失去了多态性的好处。这被称为"切片问题"。

我对OpenCV不太熟悉,但如果它像Java的其他部分一样工作,那么您可能需要实现适配器设计模式。据我所知,你不能像以前那样铸造自定义对象。下面的链接有一个很好的例子,其中包含一个实现之前和之后的例子。

适配器设计模式示例

相关内容

  • 没有找到相关文章

最新更新