I had a feeling this would happen and was trying to figure out how to
word an explaination that would make it clear.
When you inherit from a class, there is, in effect, an instance of that superclass living inside instances of the subclass. This is why any print statements inside the superclass's init method were called when the subclass (servlet b) was loaded.
This is entirely different from the OTHER instance of servlet A that is running in your container.
Another way to look at it.
With the given scenerio, you (in effect) had 3 servlet instances running.
1.) Servlet A (created from class A).
2.) Servlet B (created from class B).
3.) A secret copy of servlet A (call it SuperA).
The third one (the superclass to servlet B) lives inside of servlet B and is not visible to the servlet container. Only servlet B knows about it.
The init method to Servlet A was only called once.
The other print statement that you saw was Servlet B calling it's (secret) superclass; not Servlet A's.