Several Java textbooks state that member inner classes cannot have static members except for static final fields. However, I have been able to create such classes that compile and run successfully. For example:
class Swimmer{
class SwimmerAssistant{
static int count = 0;
SwimmerAssistant(){
count++;
}
public static void assist(){
System.out.println("I am helping the Swimmer");
}
}
public static void main(String[] args) {
SwimmerAssistant.assist(); // prints "I am helping the Swimmer"
System.out.println(SwimmerAssistant.count); // prints 0
Swimmer swimmer1 = new Swimmer();
Swimmer.SwimmerAssistant swimmerAssistant = swimmer1.new SwimmerAssistant();
Swimmer swimmer2 = new Swimmer();
Swimmer.SwimmerAssistant swimmerAssistant2 = swimmer2.new SwimmerAssistant();
System.out.println(SwimmerAssistant.count); // prints 2
}}
How is this possible?
Many thanks.