если написать код, где у тебя цепочка наследования из 20 классов, но по сути вся работа в последнем, то жвм спека требует чтобы все 20 классов оставались в рантайме -- жвм не имеет права сплющивать иерархию.
на этапе компиляции можно обнаружить, что некоторый класс является оберткой без собственной функциональности. На этом этапе можно его выкинуть из иерархии (proguard такое делает)