Что я должен был понять в полиморфизме, хрен его знает.
вот вам полиморфизм на вашем примере. у вас есть класс Работник. у него, допустим, есть метод "уволить". создадим Работнику двух наследников - Менеджер и Уборщик. в каждом из этих классов переопределим метод "уволить". в классе Менеджер этот метод будет начислять работнику три оклада и давать путевку в Турцию. а в классе Уборщик метод "уволить" будет вычитать три оклада и давать путевку в Ад.
в какой-то момент вы решаете всех уволить. берете список всех работников, то есть список объектов класса Работник. неважно кто из них менеджер, а кто уборщик, просто List<Employee>. проходите по этому списку и вызываете метод "уволить". это можно сделать, поскльку такой метод есть в классе Работник. но в рантайме жава уже будет знать, кто из этих работников менеджер, а кто уборщик. соответственно, сама аккуратно вызовет переопределенные методы для каждого из них.
польза налицо - вам не пришлось выполнять никаких проверок собственноручно. более того, если завтра вы захотите добавить ещё один тип работника - ВкручивательЛампочек, например - вам ничего не нужно будет менять в коде, который увольняет по списку всех работников, потому что в нем нет никакой связи с конкретными реализациями класса Работник (который, кстати, может быть вообще абстрактным классом или интерфейсом).
в общем, это называется, добро пожаловать в ООП ))