Для реализации полиморфизма, в этом суть ООП. Например, есть абстрактный класс Shape (фигура) с чистым методом area() (площадь фигуры). Непонятно, что за площадь у абстрактной фигуры, поэтому здесь функция не определена. И есть наследники, конкретные фигуры с имплементацией area(): Circle, Square, Rhomb, Triangle, .. Допустим, я создал круг: Shape shape = new Circle(); И дальше вызываю везде, где мне нужно shape.area() хотя 1000 раз. Но вдруг, узнается, что мне нужен не круг, а квадрат. Мне не потребуется для этого заново переписывать 1000 строк кода, а будет достаточно только одной: Shape shape = new Square(); Если, например, я работаю с коллекцией, то могу задать ее через абстрактный класс List List collection = new ArrayList() // Обычный массив Но вдруг понял, что мне необходим связный список, тогда одно движение List collection = new LinkedList() и вуаля, 1 секунда и готово.