метод конкретного класса продолжает генерировать исключение из абстрактного класса, несмотря на реализацию - PullRequest
0 голосов
/ 09 января 2012

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

public abstract class Automobile {
   public void move() {
       throw new UnsupportedOperationException();
   }
}

У меня есть конкретный класс, который расширяет мой абстрактный класс и реализует метод move. Моя проблема заключается в том, что метод продолжает бросатьUnsupportedOperationException

public class Car extends Automobile{
  int x; 
   public void move(){
    x++;
   }
}

Ответы [ 2 ]

3 голосов
/ 09 января 2012

Это может быть по многим причинам в вашем конкретном классе: может быть, ваш бетон на самом деле не расширяется Foo?Или, может быть, он вызывает super.move() где-то в своем теле.

Вместо того, чтобы выдавать исключение, правильный способ - определить класс и метод как abstract, чтобы подклассы переопределяли его.

public abstract class Foo {
    public abstract void move();
}

Обратите внимание, если Foo имеет только абстрактные методы, как в приведенном выше примере, вам нужен interface, а не абстрактный класс.Кроме того, вы должны назвать его, чтобы определить поведение

public interface Moving { 
    void move();
}

А затем:

public class MovingObject implements Moving {
    ....
    @Override
    public void move() {
       // your implementation
    }
    ....
}
1 голос
/ 09 января 2012

Вы вызываете super.move () в своем классе реализации? Eclipse генерирует этот вызов по умолчанию, если вы использовали Source-> Override / Implement Methods ...

В противном случае я думаю, что вы не корректно переопределили метод.

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