Как предполагается, почти везде я буду использовать интерфейс все время, особенно при работе с коллекциями.
// Using interfaces
List<Integer> list = new LinkedList<Integer>();
((LinkedList) list).offerFirst(num);
//Using concrete class
LinkedList list = new LinkedList<Integer>();
list.offerFirst(num);
При первом подходе компилятор выдает предупреждение, и даже синтаксис кажется громоздким.
warning: [unchecked] unchecked call to offerFirst(E) as a member of the raw type LinkedList