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

Это холиварная тема, вот здесь есть обсуждение
https://stackoverflow.com/questions/19998454/when-...
в интерфейсы добавили возможность устанавливать состояния и добавлять логику в методыв реальной жизни с таким не сталкивался. Теоретически может упростить разработку. В интерфейсе мы описываем возможности объектов и если у разных классов может быть одна реализация метода, почему ее не записать сразу в интерфейсе? Но случай где это будет реально полезно мне придумать сложно