尽管实现,具体类方法仍然从抽象类中抛出异常

时间:2012-01-09 13:05:37

标签: java class exception abstract

我有一个抽象类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 个答案:

答案 0 :(得分:3)

你的具体课可能有很多原因:也许你的具体实际上并没有扩展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 :(得分:1)

您是否在实现类中调用了super.move()?如果您使用Source-> Override / Implement Methods ...

,则默认情况下Eclipse会生成该调用

否则我认为你没有正确覆盖方法。