带有泛型参数的Java抽象方法

带有泛型参数的Java抽象方法,java,generics,abstract,extends,Java,Generics,Abstract,Extends,我有以下情况:有抽象类(abs)和从abs扩展而来的两个类(con1和con2) 现在我想让abs有一个带参数的抽象函数,其中参数的类型必须是类本身的类型 我在abs课程中尝试了以下内容: public abstract void foo(abs i); 以及con1和con2中的以下内容: public abstract void foo(con1 i); public abstract void foo(con1 i); 但这不起作用。解决此类问题的一般方法是什么?方法定义应与con1和

我有以下情况:有抽象类(
abs
)和从
abs
扩展而来的两个类(
con1
con2

现在我想让abs有一个带参数的抽象函数,其中参数的类型必须是类本身的类型

我在
abs
课程中尝试了以下内容:

public abstract void foo(abs i);
以及
con1
con2
中的以下内容:

public abstract void foo(con1 i);
public abstract void foo(con1 i);

但这不起作用。解决此类问题的一般方法是什么?

方法定义应与con1和con2相同:

@override
public abstract void foo(abs i)
{ ...

这里的注释检查您是否真的覆盖了这里的父项。谷歌“继承和多态性”不,基本上没有实现这个方法。有了你的声明,我应该可以写:

abs x = new con1();
abs y = new con2();
x.foo(y);
听起来你想要:

public abstract class Abstract<T extends Abstract<T>>
{
    public abstract void foo(T t);
}
公共抽象类抽象
{
公开摘要void foo(T);
}
然后:

public final类Concrete1扩展了抽象
{
@重写公共void foo(1 x){…}
}
请注意,这并不能完全强制执行,因为您仍然可以编写:

public final class Evil extends Abstract<Concrete1>
public final类扩展抽象

。。。但至少在每个人都“按规则行事”的情况下,它是有效的。

“这不起作用”永远是不够的信息。不要只是描述问题,你应该给出一个简短而完整的例子来演示它,并包括你得到的确切错误信息。谢谢Jon的回答。您说过您应该能够编写abs x=new con1();abs y=新的con2();x、 傅(y),;在我的设置中这应该是非法的。“公共最终类Concrete1扩展抽象”对我来说听起来非常多余。但如果这是唯一的解决办法,我将采取这种做法。谢谢:)@DanielRoss:你在问题中描述代码的方式,是的。我提供的代码不是这样的。
public final class Evil extends Abstract<Concrete1>