Преимущества - можно делать неявные вещи.
Недостаток - можно делать неявные вещи.

Например, в джяве фреймворк Спрынг основан на прокси-классах, то есть рефлексией анализируется ваш класс (по-нашенски - модуль), все интерфейсные методы фиксируются и прямо в рантайме формируется (на уровне машкода, да, вот какой прогрэсс) класс-обёртка с какими-то дополнительными функциями, например, транзакционность до первого исключения. Клиентский код как работал, так и работает, а класс по факту уже другой. Вы должны это предполагать, надеяться на это. Проверять это. Но клиентский код всего этого не предполагает и когда, например, он попытается стандартными средствами сохранить состояние этого класса в JSON, тут и наступит разочарование. Дальше олухи одумались и ввели понятие POJO, которые типа не принято обёртывать, они типа честные классы и объекты.

Так что как всегда, придумали дурь, а теперь с этим живут.