我有这个抽象类:
public abstract class Foo{
//some attributes
public Foo(params){}
public abstract SomeInterface search(Long id);
public abstract boolean insert(SomeInterface param);
}
Run Code Online (Sandbox Code Playgroud)
我有以下课程:
public class InterfaceImplementation implements SomeInterface {
//Some code here
}
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个Foo实例:
public class Bar extends Foo{
public Foo(params){
super(params);
}
@Override
public InterfaceImplementation search(Long id){
// some code here
}
// The above code compiles
@Override
public boolean insert(InterfaceImplementation param){
// some code specific to the InterfaceImplementation here
}
// This function does not compile/
}
Run Code Online (Sandbox Code Playgroud)
那么,我做错了什么,我怎样才能实现我想做的事情呢?
您的类Bar不会覆盖insert,因为参数类型必须完全匹配.这是因为你的实现需要一个InterfaceImplementation而不是一个SomeInterface.
你可以做些什么来编译它:
SomeInterface作为参数Bar的insert方法,因为任何子类必须能够处理任何执行SomeInterface,如规定Foo.要么
引入泛型SomeInterface来指定参数类型应该是什么.
public abstract class Foo<T extends SomeInterface>{
Run Code Online (Sandbox Code Playgroud)和
public abstract boolean insert(T param);
Run Code Online (Sandbox Code Playgroud)
然后你可以指定T子类中的内容:
public class Bar extends Foo<InterfaceImplementation>{
Run Code Online (Sandbox Code Playgroud)
和
@Override
public boolean insert(InterfaceImplementation param){
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |