Howdy -- just wanted to clarify a couple of little terminology things
For constructor chaining, we actually say that constructors are CALLED from the bottom up, but COMPLETE from the top-down. So constructor chaining doesn't exactly start from the top, at Object, although Object is the first to actually complete. Constructor chaining puts the constructors on the stack starting with the class you said "new" on. So if you say new Dog(), the Dog constructor first goes on the stack. Then, the immediate superclass constructor (Animal()) is invoked (using the call to super()) and then the next superclass, etc. all the way up to Object. So Object's constructor is the LAST to be invoked (it's at the top of the stack), but it is the FIRST to actually complete. Then once it completes it is popped off the stack and the next highest class in the inheritance tree runs IT'S constructor, and so on until you get to the bottom -- the constructor that was first invoked.
Here's one way to remember it...
Your parents have to be born FIRST, before YOU can be born.
Java doesn't really violate the fundamentals of biology. Well, not completely. Then again, you can only have one parent... oh well, we won't go there ; )
And one other thing:
We make a distinction between the "default" constructor and a "no-arg" constructor. The default constructor is the one the compiler puts in, which happens to be a no-arg constructor. But if you write one yourself, we say that you wrote a no-arg constructor, not a default constructor. The default constructor is the one you get if you don't write any constructors at all.
Cheers,
Kathy
Author, "Cowgirl's guide to no-arg relationships"