When I first started, inheritance and polymorphism were confusing, and recursion took a little while to wrap my head around, too. After practicing for a while, though, it's all second nature now. You have to just stick with it and keep writing code and it'll get clearer with time.
I know that's not the most helpful advice, but even when you start to get it, you think "oh, I get that now" and you're able to make something work for the first time. It was a bit tough,but you got it to work.
Come back to it a year later and it'll seem trivially easy if you've had a lot of practice in the meantime.
I remember the first time I had to write a linked list. It was confusing and difficult, and took forever to get it working, but I understood the concepts. I've come back and written other linked lists years later and they're a peice of cake now.