Обычно безопасная ставка - сделать все ваши классы абстрактными или окончательными.
Таким образом, становится ясно, нужно ли разрабатывать класс для наследования.
Если вы узнаете позжечто по какой-то причине вам нужно наследовать от конкретного (неабстрактного) класса - что обычно является признаком асимметрии в вашем общем проекте - вы все равно можете удалить ключевое слово final и убедиться, что ваш класс подходит длянаследование.
Таким образом, вы избавляетесь от необходимости разрабатывать все свои классы для наследования, и в то же время вы получаете поддерживаемый код с ясными намерениями.