抽象类参数抽象方法的Java抽象类

时间:2011-02-16 12:36:56

标签: java abstract-class

给定两个抽象类,AClass1和AClass2,第一个有一个抽象方法,使用第二个作为参数,如何在没有Java抱怨未实现的抽象方法的情况下使用这些抽象类的子类一起工作? / p>

public abstract class AClass1 {
   ...
   public abstract void aMethod(AClass2 param1, int param2, ... );
   ...
}

public abstract class AClass2 {
   ...
}

public class CClass1 extends AClass1 {
   ...
   public void aMethod(CClass2 param1, int param2, ...) {
      ...
   }

public class CClass2 extends AClass2 {
   ...
}

我认为具体的类CClass1会没问题,但Java会让我实现public void aMethod(AClass ...)

我做错了什么?

4 个答案:

答案 0 :(得分:4)

CClass1必须实现一个方法,它可以接受任何AClass2,因为你已经指定了它。您可以重载此方法,但必须实现父方法的抽象方法。

答案 1 :(得分:1)

您必须在具体课程中保留正确的签名:

public abstract void aMethod(AClass2 param1, int param2, ... );

答案 2 :(得分:0)

Java仅支持covariant return types,而不支持协变参数类型。

如果不是这样,假设您获得了子类的实例,但将其称为抽象类:

AClass1 a = new CClass1();
AClass2 param = new AnotherCClass();
a.aMethod(param); // ClassCastException - can't cast AnotherCClass to CClass2

答案 3 :(得分:0)

我知道这个问题现在已经过时了,但最近我遇到了同样的问题。

我最后做的是,我没有定义抽象类,而是为子类定义了一个接口。

这样您很遗憾无法共享方法实现,但您可以为它们创建模板,并且根据您的IDE,将自动为您生成方法。