Зачем мне универсальный класс, если в методе я могу указать родительский класс?
Если под "универсальным классом" вы имеете в виду класс-дженерик, то почитайте про параметрический полиморфизм и полиморфизм через подтипы. Параметрический полиморфизм в контексте C# это про дженерики, полиморфизм через подтипы - это о вашем "указать родительский класс".

Это сильно разные механизмы, и чтобы понять разницу, попробуйте реализовать какой-нибудь List или Dictionary без использования дженериков, как предлагает вам Василий Банников , и как было в .NET 1.1 (о боги, это было как будто позавчера), до появления обобщённых типов. И увидите, как теряется типобезопасность и сколько нужно кастить туда-сюда.
1. Не всегда можно указать родительский класс
2. Иногда переход к родительскому классу/интерфейсу не оптимален. Например если ты используешь структуры - будет происходить боксинг.
3. В некоторых случаях потребителю бы хотелось работать с конкретным типом, а не с базовым. Попробуй реализовать List без женериков.

PS: нет такого понятия, как "универсальный класс"