hackjutsu
hackjutsu

Reputation: 8922

Compiler Error when Interface within Inner Class

I want to declare an interface inside an inner class, which shows compiler error message "inner classes cannot have static declarations".

public class Apple {       
    //...

    public class InnerApple{
    //...

        public interface InnerInterface{
            //Error: inner classes cannot have static declarations
        }
    }
}

Does it mean interface is actually static in Java?

I'm using Java 1.7. Thanks!!

Upvotes: 0

Views: 1305

Answers (2)

rgettman
rgettman

Reputation: 178263

Yes, member interfaces are implicitly static. Section 8.5.1 of the JLS states:

A member interface is implicitly static (§9.1.1).

For it not to be static, the interface must be top-level, with no enclosing class or interface.

Upvotes: 1

CoronA
CoronA

Reputation: 8075

An interface is always static - in a sense that there cannot be any dependency to another instance.

Having two levels of inner declarations is quite uncommon, but if it is intended I would expect that at least InnerApple is static:

public class Apple {       
  public static class InnerApple{

    public interface InnerInterface{
        //this does not cause an error
    }
  }
}

In most cases the keyword static of inner classes is omitted. If so this class may contain dependencies to a surrounding instance (and not only to the class as static inner classes do).

Upvotes: 3

Related Questions