I was reading up on Polymorphism and after some searching I was confused about about the difference of compile-time and run-time polymorphism.

Lets say i have a class ABC and one other class that extends ABC, 
class DEF like so:

```
class ABC{
    public void myMethod(){
    System.out.println("Overridden Method");
   }
}

public class DEF extends ABC{
    public void myMethod(){
    System.out.println("Overriding Method");
    }
}

public static void main(String args[]){
   ABC obj = new DEF();
   obj.myMethod();
   }
}

```

If we want to be able to replace a class with another class, which performs the same task but in a different way **without** having too **recompile** the class that calls them, Is method overriding the way or method overloading?