2015-11-15 8 views
-4

У меня проблема, у меня есть абстрактный класс, который реализует интерфейс, и еще один класс, который расширяет этот первый абстрактный класс, но я получил сообщение об ошибке, в котором говорится, что мой второй класс должен наследовать методы из интерфейса, и я не хочу этого, я также могу изменить его и на абстрактный класс, но тогда я не могу вызвать конструктор из этого класса в каком-то третьем классе, как я могу это исправить? Я искал ответ в Интернете, но не смог найти его, и я не понимаю, абстрактные классы Rly хорошо, так что я не могу решить it.Please помочь (п.с. извините за мой английский, это очень плохо)Класс, который расширяет абстрактный класс

Edit: У меня есть задание, где требуется, чтобы мой второй класс должен расширять абстрактный класс, и я реализую интерфейс, потому что они также дали мне основной класс, в котором они делают объект из конструктора в моем втором классе, а затем они используют его с типом интерфейса, я не знаю, если это имеет смысл, код довольно длинный, но я дам несколько строк: Вот мой основной класс (NationalTeam bulgaria = новый NationalTeam («Болгария», Form.F352, «Болгария»); nationalManager.setManagingTeam (bulgaria);) (bulgaria mu st тип интерфейса), также здесь мой конструктор из второго класса, который расширяет абстрактный класс: (public NationalTeam (название строки, формирование формации, страна String) { super (название, формация); this.country = страна; })

+1

Либо ваш абстрактный класс, либо конкретный класс должен реализовывать методы, определенные в интерфейсе. Предпочтительно, чтобы абстрактный класс должен это делать. – TheLostMind

+0

Добро пожаловать в переполнение стека! Когда вы спрашиваете об ошибке, ** укажите фактическую ошибку **. Кроме того, показ деклараций классов может резко ** уточнить, что вы просите. Пожалуйста, примите [тур], посмотрите вокруг и прочитайте [помощь], в частности [* Как задать хороший вопрос?] (/ Help/how-to-ask) –

ответ

0

Аннотация: Абстрактные классы могут иметь абстрактные методы, что означает, что методы являются методами без реализаций.

Когда вы расширяете абстрактный класс A, методы класса A должны быть реализованы вашим подклассом, если говорить о B, если вы не сделаете свой класс B классом anstract.

0

Вам нужно подумать, как хотите создать систему не так, как компилятор заставляет вас.

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

С другим путем, если второй класс вашей реализации не абстрактно, то вы должны обеспечить реализацию, чтобы объект его

0

мой второй класс должен наследовать методы из интерфейса, и я не хочу, что

Действительно? Тогда почему вы объявили интерфейс в первую очередь? Почему абстрактный класс должен реализовать интерфейс?

Интерфейсы должны быть более высоким уровнем абстракции. Это контракт между клиентским кодом и библиотекой. Он создает интерфейс между клиентским кодом и библиотекой. Это как сказать: «У меня есть способности делать то, что требует интерфейс». И ты говоришь, что не хочешь?

Итак, есть две хорошие пути и один плохой способ исправить это:

Хорошие

  1. Не расширяющих абстрактный класс. Потому что, если вы это сделаете, это, вероятно, не имеет смысла.

  2. Относительный класс не расширяет интерфейс.

Bad (Это действительно очень плохо)

Добавьте методы в интерфейсе и оставить тело пустым или возвращает случайное значение. Опять же, не делайте этого, если вы не должны.

+0

У меня есть задание, где требуется, чтобы мой второй класс должен расширять абстрактный класс, и я реализую интерфейс, потому что они также дали мне основной класс, в котором они делают объект из конструктора в моем втором классе, а затем они используют его с типом интерфейса, я не знаете, если это имеет смысл, код довольно длинный, но я дам несколько строк: – user18497

+0

Думаю, тогда вам придется использовать плохой BAD BAD !!! метод ... – Sweeper