An anonymous class can extend a class or implement an interface at a time not both.
An inner class can be instantiated outside of a class provided it is not private but only using the reference of the outer class. That is you must create an instance of the outer class to instantiate the inner class. This is the case of (non static inner class). To instantiate a static inner class you dont require to first instantiate the outer class. You do like this:
Outer.inner in = new Outer.inner(); //inner is static