实践中遇到的一个问题,实在搞不懂,特来请教各位。1.首先有一个接口,接口里有一个get方法。public interface HeInterface <T extends Serializable, PK extends Serializable> { public T get(PK id);}2.其次有一个类,实现了接口的get方法。public abstract class HeAbstract <T extends Serializable, PK extends Serializable> implements IBaseDao<T, PK>{ @Override public T get(PK id) { if(id==null)return null; return (T) getCurrentSession().get(entityClass, id); }} 3.然后我写了一个接口,继承了HeInterface这个接口,并且也有一个get方法。public interface MyInterface extends HeInterface<ClassA, String>{ public ClassA get(String id);}4.最后我写了一个实现类,实现我的接口,但是发现IDE的添加未实现的方法没有提示get方法为未实现,意思是我的get已经被实现了吗?接口继承接口可以存在重写吗?还是因为泛型导致这种问题?这是怎么一回事,请各位明示。
2 回答
largeQ
TA贡献2039条经验 获得超7个赞
public interface HeInterface <T extends Serializable, PK extends Serializable>
public interface MyInterface extends HeInterface<ClassA, String>
MyInterface 相当于把HeInterface里的泛型参数具体化了
T=ClassA
PK=String
相应的,HeInterface接口里的方法
public T get(PK id);
就变成了
public ClassA get(String id);
这个方法与MyInterface里重新定义的方法
public ClassA get(String id);
一模一样
对于IDE和编译器来说,2个定义一模一样的接口方法,只需要实现一个
例如
public interface A() {
public void function();
}
public interface B() {
public void function();
}
class Impl implements A, B {
public void function() {
//do something
//这里即是A接口的实现,也是B接口的实现
}
}
实际上,在接口继承并指定泛型参数时,完全可以不用再定义方法
添加回答
举报
0/150
提交
取消