简体   繁体   中英

concrete class method keeps throwing an exception from abstract class despite implementation

I have an abstract class Automobile which has an unimplemented method called move so

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

I have a concrete class which extends my abstract class and implements the move method.My problem is the method keeps throwing an UnsupportedOperationException

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

It could be for many reasons in your concrete class: maybe your concrete doesn't actually extends Foo ? Or maybe it calls super.move() somewhere in its body.

Instead of throwing an exception, the correct way is to define the class and method as abstract to force subclasses to override it.

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

Please note if Foo only has abstract methods, like in the example above, that's an interface that you want, not an abstract class. Also, you should name it to define a behaviour

public interface Moving { 
    void move();
}

And then:

public class MovingObject implements Moving {
    ....
    @Override
    public void move() {
       // your implementation
    }
    ....
}

Are you calling super.move() in your implementation class? Eclipse generates that call by default if you used Source->Override/Implement Methods...

Otherwise I think, that you did not override the method correctly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM