Абстрактный класс Java с абстрактным методом с абстрактным параметром класса - PullRequest
1 голос
/ 16 февраля 2011

Учитывая два абстрактных класса, AClass1 и AClass2, первый из которых имеет абстрактный метод, использующий второй из которых в качестве параметра, как вы используете подклассы этих абстрактных классов для совместной работы без Java, не жалующихся на неосуществленные абстрактные методы?

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 ]

4 голосов
/ 16 февраля 2011

CClass1 должен реализовать метод, который может принимать любой AClass2, как вы указали, что он будет.Вы можете перегрузить этот метод, но вам нужно реализовать абстрактные методы родительского элемента.

1 голос
/ 16 февраля 2011

Вы должны сохранить правильную подпись в вашем конкретном классе:

public abstract void aMethod(AClass2 param1, int param2, ... );
0 голосов
/ 23 октября 2012

Я знаю, что этот вопрос уже устарел, но недавно у меня возникла та же проблема.

В итоге я не определил абстрактный класс, но определил интерфейс для дочерних классов.

Таким образом, вы, к сожалению, не можете поделиться реализациями методов, но вы можете иметь шаблон для них, и в зависимости от вашей IDE методы будут автоматически сгенерированы для вас.

0 голосов
/ 16 февраля 2011

Java поддерживает только ковариант возврат типы , не ковариант параметр типы.

Если это не так, представьте, что вы получаете экземплярподкласса, но называйте его абстрактным классом:

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