Java 如何从实现接口的继承类更改参数?
我有一个接口和一个实现该接口的类,如下所示:Java 如何从实现接口的继承类更改参数?,java,inheritance,interface,Java,Inheritance,Interface,我有一个接口和一个实现该接口的类,如下所示: public interface DocumentDAO<T>{ public long insert (T doc); } public class PostgreSQLDocumentDAO implements DocumentDAO<Document>{ public long insert(Document doc){} protected void insertDocument(Docum
public interface DocumentDAO<T>{
public long insert (T doc);
}
public class PostgreSQLDocumentDAO implements DocumentDAO<Document>{
public long insert(Document doc){}
protected void insertDocument(Document doc){}
}
public class PostgreSQLPageDAO extends PostgreSQLDocumentDAO{
public long insert(Page doc){
super.insertDocument(page);
//specific implementation goes here
}
}
我怎么能得到这个
更新:上面的代码不正确,因为名为
Inserter
的类使用接口DocumentDAO
。当它调用insert方法时,即使是PostgreSQLPageDAO对象,它也会调用insert方法来插入文档,因为该方法是继承的
我想做一个方法,当Inserter
类调用insert方法时,它使用插入页面的方法。这样,我想我需要覆盖PostgreSQLDocumentDAO
中的insert(Document doc)
两个选项
public class PostgreSQLDocumentDAO<D extends Document> implements DocumentDAO<D>
这里有两种选择
public class PostgreSQLDocumentDAO<D extends Document> implements DocumentDAO<D>
我看没有问题。由于
页面
是从文档
派生出来的,因此您只需传递一个页面
来代替文档
如果需要在派生类的方法中进行特殊处理,可以检查文档
是否为实例
页面
,并执行所需操作
当然,假设您不能更改接口/类我看不出有问题。由于
页面
是从文档
派生出来的,因此您只需传递一个页面
来代替文档
如果需要在派生类的方法中进行特殊处理,可以检查文档
是否为实例
页面
,并执行所需操作
当然,假设您不能更改接口/类我编辑了我的问题并解释了问题所在。用“汇编”的术语来说,它会起作用,但用“逻辑”的术语来说就不行了。我编辑了我的问题,解释了什么是问题。在“编译”术语中,它可以工作,但在“逻辑”术语中则不行。您要求的是让接口
DocumentDAO
能够根据它不知道的类型(即Page
)选择方法。您描述的是多态性在Java中的工作原理。您要求的是让接口DocumentDAO
能够根据它不知道的类型(即页面
)选择一种方法。
// Override
@Override
public long insert(Document doc){
if (!(doc instanceof Page))
throw new IlegalArgumentException("insert only accepts Page");
super.insert(doc);
}
// Overload
public long insert(Page page){
super.insert(page);
}