И как понять, где использовать абстрактный класс, а где интерфейс?
Так же, как и раньше. Интерфейс - просто контракт, как правильно было сказано.
Мало ли чем они там в Java8 упоролись, концепция ООП не должна из-за них страдать.
Ну и, классика, следуй принципам SOLID, не смотря на особенности каких-то ЯП какими бы они ни были.
Это холиварная тема, вот здесь есть обсуждение
https://stackoverflow.com/questions/19998454/when-...