我有以下情况:有抽象类(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);
但这没有用。解决这类问题的一般方法是什么?
答案 0 :(得分:2)
不,基本上没有实现该方法。有了你的声明,我应能够写:
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);
}
然后:
public final class Concrete1 extends Abstract<Concrete1>
{
@Override public void foo(Concrete1 x) { ... }
}
请注意,这并没有完全强制执行,因为您仍然可以写:
public final class Evil extends Abstract<Concrete1>
......但至少每个人都在“遵守规则”时都会有效。
答案 1 :(得分:0)
方法定义在con1和con2上应该相同:
@override
public abstract void foo(abs i)
{ ...
这里的注释检查你真的覆盖了父母。谷歌“继承和多态”