All java method is virtual (by design).
They rely on the implementing classes to provide the method implementations.
Here is more information.
- Can you write virtual functions / methods in Java?
- https://en.wikipedia.org/wiki/Virtual_function
Here is an excerpt from wikipedia :-
public class Animal {
   public void eat() { 
      System.out.println("I eat like a generic Animal."); 
   }
   public static void main(String[] args) {
      Animal animal=new Wolf ();
      animal.eat(); //print "I eat like a wolf!
   }
}
class Wolf extends Animal {
   @Override
   public void eat() { 
      System.out.println("I eat like a wolf!"); 
   }
}
Virtual functions are resolved 'late'. If the function in question is
  'virtual' in the base class, the most-derived class's implementation
  of the function is called according to the actual type of the object
  referred to, regardless of the declared type of the pointer or
  reference. If it is not 'virtual', the method is resolved 'early' and
  the function called is selected according to the declared type of the
  pointer or reference.
Virtual functions allow a program to call methods that don't
  necessarily even exist at the moment the code is compiled.