Out of curiosity, what are you goals of this?

Reason I ask is that there are plenty of math libraries available so if you are making it for usage purposes then don't waste the time, just use a pre-made one. If you are making it for learning purposes then right on. However, it kind of sounds like you want to start with remaking what is already defined, like an integer, or floating point number, etc.

Also...

... basically starting with the most basic classes as natural numbers or positive integers, then negative integers, and zero. Then integers, which is a superset of these three...
Integers are natural numbers, and to have them inherit a natural number class makes no sense since you have a keyword called int.

This is just my opinion, and I speak out of turn and don't always have the best advice. However, I would make what is not already readily available, ie. a complex number class that has a real and imaginary part. Even that is still available in already made math libraries, though. So in short, if you want to make an integer class, why? Use the keyword int instead