0

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.

  • Which version of Java are you using? You're allowed to do it in Java 16+, but [your code doesn't work in older versions](https://ideone.com/URtW6G) – Andy Turner Jul 29 '21 at 09:46
  • 1
    Possible duplicate: https://stackoverflow.com/questions/68521280/why-are-static-methods-allowed-inside-a-non-static-inner-class-in-java-16 – Sweeper Jul 29 '21 at 09:48

0 Answers0