Static means that all members of a class share the same container for a value.
For example: a class named Family has a variable: public static int cookieJar;
When mary (an instance of Family) or bobby (another instance of Family) access cookieJar, they access the same cookieJar, thus changing the number of cookies in the jar for the whole family.
1a. Little mary, being a member of Family, always has access to the cookieJar, and she should, it is the cookieJar shared by the Family.
1b. A static method just does not know which object's values to change unless a reference is passed in.
public static final Cookie getCookie(handInJar) {
if(handInJar == mary.getCookieHand) {
if(time > bedtime) {
return noCookie;
}
return smallCookie;
}
return bigCookie;
}
How will cookieJar know anything about mary? Where is this information stored? The Family class would have to maintain a reference to every member. What would this method do before little mary was even born?
2. What would super refer to from the main method?
3. The super class must be fully constructed first. When you do not include super(); or a call with parameters, then super(); is automatically called as the first line of the constructor anyway. If you wish to call, for example super(bundleSavedState); then you must do so before super(); is automatically called. This is the reason we the users must call it on the first line of the constructor.
The reason it is the first thing done is because the new class can not be an object of the super class until the super constructor returns. Only then can the new class begin to exist. If super was initialized later, the new class would have no access to anything from super() during it's own construction. What if super() happens to set values needed by the new class? The only way would be to let super construct first.