Почему используют interface a не abstract class?
Все зависит от того, что тебе действительно нужно. Либо тебе надо расширить функционал кнопки, и ты наследуешься от нее, либо тебе нужен функционал кнопки в твоем классе, и ты имплементируешь интерфейс кнопки.class Button;
class RedButton extends Button;interface Button;
class Image implements Button;
Абстрактный класс может реализовать некое базовое поведение, которое затем унаследуют потомки, а интерфейс это в чистом виде контракт, никакого поведения, только сигнатуры.
Если никакого базового поведения, которое могли бы использовать потомки нет, то нет смысла и использовать абстрактный класс.