2015-03-19 653 views
0

我有以下情况:有一个抽象类(abs),并从abscon1con2Java的泛型参数抽象方法

现在我想要腹肌有一个参数的抽象功能扩展两个类参数的类型必须是类本身的类型。

我试图在abs类以下内容:

public abstract void foo(abs i); 

con1con2如下:

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

但这并没有工作。解决这样的问题的一般方法是什么?

+0

“这没有用”是从来没有足够的信息。与其仅仅描述问题,你应该给出一个简短但完整的例子来证明它,并且包括你得到的确切的错误信息。 – 2015-03-19 11:32:58

回答

0

的方法定义应该是CN1和CN2一样:

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

这里标注的支票,你是真的在这里重写父。谷歌“继承和多态”

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> 

...但它至少在每个人“按规则行事”时都有效。

+0

感谢Jon的回答。你说你应该可以写abs x = new con1(); abs y = new con2(); x.foo(y);这在我的场合应该是非法的。和“公共最终课程Concrete1扩展摘要”对我来说听起来非常多余。但如果这是唯一的解决方案,我会采取这种方法。谢谢:) – 2015-03-19 11:39:40

+0

@DanielRoss:用你在问题中描述代码的方式,是的。这*不适用于我提供的代码。 – 2015-03-19 11:40:48