【发布时间】:2015-04-29 08:06:34
【问题描述】:
Java 1.6。我扩展了一个类以包含一些方法。现在我想用扩展类代替基类。但是,可以使用基类的类不能“识别”扩展类。什么是(推荐的)修复?
我知道这个问题已经被问过很多次了,但我不明白!
示例- 扩展类 SAMRecord 并使用 SAMRecordExt 后缀:
public class SAMRecordExt extends SAMRecord{
public SAMRecordExt(SAMFileHeader header) {
super(header);
}
}
现在,虽然这可行:
SAMRecord rec= sam.iterator().next();
这给了我一个编译错误
SAMRecordExt recext= sam.iterator().next();
>>> Type mismatch: cannot convert from SAMRecord to SAMRecordExt
不出所料,这也不起作用(运行时错误):
SAMRecordExt recext= (SAMRecordExt) sam.iterator().next();
>>> Exception in thread "main" java.lang.ClassCastException: htsjdk.samtools.SAMRecord cannot be cast to markDupsByStartEnd.SAMRecordExt
at markDupsByStartEnd.Main.main(Main.java:96)
如何使扩展类在基类工作的地方工作?
编辑:有关我正在使用的类的更多详细信息。 sam对象来自
SamReaderFactory sf = SamReaderFactory.makeDefault();
SamReader sam= sf.open(new File(insam));
完整文档是https://samtools.github.io/htsjdk/javadoc/htsjdk/index.html
【问题讨论】:
-
能否提供上面代码中变量“sam”的声明
-
看来那个类是要和超类一起使用的,意思是:作者知道超类,需要它提供的功能。现在,问题是,当您尝试进行强制转换时:子类的每个实例都是超类的实例,但并非超类的每个实例都是子类的实例。
-
在我看来,您没有运行您认为正在运行的代码,或者您没有编译您发布的代码。根据您发布的代码,您不应该收到任何提供
SAMRecordExt extends SAMRecord的编译错误。
标签: java class extends type-mismatch