一道Java关于接口、继承和重写的基础问题

实践中遇到的一个问题,实在搞不懂,特来请教各位。

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已经被实现了吗?接口继承接口可以存在重写吗?还是因为泛型导致这种问题?这是怎么一回事,请各位明示。


慕无忌1623718
浏览 540回答 2
2回答

阿波罗的战车

从你的描述上来看get并没有实现。

largeQ

public interface HeInterface <T extends Serializable, PK extends Serializable>public interface MyInterface extends HeInterface<ClassA, String>MyInterface 相当于把HeInterface里的泛型参数具体化了T=ClassAPK=String相应的,HeInterface接口里的方法public T get(PK id);就变成了public ClassA get(String id);这个方法与MyInterface里重新定义的方法public ClassA get(String id);一模一样对于IDE和编译器来说,2个定义一模一样的接口方法,只需要实现一个例如public interface A() {&nbsp; &nbsp; public void function();}public interface B() {&nbsp; &nbsp; public void function();}class Impl implements A, B {&nbsp; &nbsp; public void function() {&nbsp; &nbsp; &nbsp; &nbsp; //do something&nbsp; &nbsp; &nbsp; &nbsp; //这里即是A接口的实现,也是B接口的实现&nbsp; &nbsp; }}实际上,在接口继承并指定泛型参数时,完全可以不用再定义方法
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java